创建一个简单的C#DLL和红宝石访问(Creating a simple c# dll and ac

2019-07-18 07:48发布

我试图让我的第一个C#DLL。 我希望能够用的Win32API调用它的方法/函数的红宝石。 我做了这个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;

        }
    }
}

我与Visual Studio 2010编译它,并得到了我的ClassLibrary1.dll文件。

现在的红宝石部分我想这:

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,况且我有C#经验。 我只是想上手。 我之前(USER32大部分)已经使用了许多的DLL通过Win32API的红宝石。

我想我的dll不好吗?

问候,

Answer 1:

要作为一个Win32方面所做的DLL消耗的功能,这些功能必须是出口可见从DLL。 这些功能通常被标记dllexport并会在DLL的导出表显示出来。 您可以验证USER32和其他Win32 DLL中使用实用工具,如做DUMPBIN(MSDN) 。

DLLEXPORT,dllimport的@ MSDN

不幸的是,.NET并没有作出职能出口可见,仅适用于通过引进这种功能直接支持的DllImport(MSDN)属性。

COM是消耗从non-.NET环境中.NET编写的代码,最简单的方法,但如果你必须使用低级别绑定,你可以在C,C ++ / CLI,或任何其他语言和框架组合的中间DLL可以写头出口到DLL,打电话给你的.NET代码。

此外,在使通过编译后的自动化或其他解决方法出现这种情况存在的几篇文章,这里仅供参考等等。

如何自动导出.NET功能于托管程序@ CodeProject上

托管输出@谷歌协作平台

DLLEXPORT -提供C风格的出口纯.NET程序集



Answer 2:

无需做任何额外的东西,创造了DLL旨在.NET运行时(CLR的)内部运行的Assmebly。

:按照相关的问题描述,您可以通过COM揭露它红宝石可以导入一个.NET的DLL? 哪一个



文章来源: Creating a simple c# dll and access it from ruby
标签: c# ruby winapi dll