Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
创建一个简单的c#dll并从ruby访问它_C#_Ruby_Winapi_Dll - Fatal编程技术网

创建一个简单的c#dll并从ruby访问它

创建一个简单的c#dll并从ruby访问它,c#,ruby,winapi,dll,C#,Ruby,Winapi,Dll,我正在尝试制作我的第一个c#dll。 我希望能够使用win32API从ruby调用它的方法/函数。 我制作了以下dll: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ClassLibrary1 { public class Class1 { public int PropA = 10; publi

我正在尝试制作我的第一个c#dll。 我希望能够使用win32API从ruby调用它的方法/函数。 我制作了以下dll:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ClassLibrary1
{
    public class Class1
    {

        public int PropA = 10;

        public void Multiply(Int32 myFactor)
        {
            PropA *= myFactor;

        }
    }
}
我用VisualStudio2010编译了它,得到了ClassLibrary1.dll文件

对于ruby部分,我尝试了以下方法:

f = "c:/path_to_file/ClassLibrary1.dll"
mult = Win32API.new(f,"Multiply",["I"],"I")
但是,我得到了以下错误:

Error: #<RuntimeError: (eval):0:in `initialize': GetProcAddress: Multiply or MultiplyA

错误:#在不做任何额外操作的情况下,创建的DLL可能是在.Net运行时(CLR)内运行的


您可以通过Com公开它,如相关问题中所述:要像在Win32上下文中那样使用DLL中的函数,这些函数需要从DLL中导出可见。这些函数通常标记为
dllexport
,并将显示在DLL的导出表中。您可以使用实用程序(如)验证user32和其他Win32 DLL是否执行此操作

遗憾的是,.NET不支持立即使函数导出可见,只支持通过属性引入此类函数

COM是从非.NET环境中使用.NET中编写的代码的最简单方法,但如果必须使用较低级别的绑定,则可以使用C、C++/CLI或任何其他可以将导出头写入DLL的语言和框架组合创建中间DLL,以调用.NET代码

另外,有几篇文章是关于通过编译后自动化或其他解决方法实现这一点的,这里有几篇供您参考


我对dll完全没有经验。什么类型的dll可用于win32API?还有,你知道这方面的教程吗?使用win32ole并不是我想要的工作方式……侧栏:dllexport是在早期的C/pascal windows时代构思的一种目录机制。有关其使用方式的完整说明如下: