创建可在另一种语言上调用的win32api(dll)

时间:2013-07-06 22:45:16

标签: c# c++ winapi

如何创建可在其他语言上调用的win32api(dll)?例如:

当我使用ruby时,我应该使用我在C#或C ++上编写的dll。那么如何创建这样的动态库呢?

2 个答案:

答案 0 :(得分:0)

C ++和C#Dlls之间存在重要差异。

C ++允许您公开可以从ruby调用的全局函数(使用__declspec(dllexport))。

C#Dll包含一个清单,可用于查找所有类型并使用所述Dll中的整个对象模型。

我从未尝试过使用ruby的后者(即所有类型和类层次结构),但是,如果可能的话,它只是能够调用导出函数的首选方法。 IronRuby显然没有导入.NET类型的问题。

要创建C ++库,请选择Visual C ++ Win32项目,然后在随后出现的对话框中按Next以选中DLL复选框。否则,请选择Visual C#类库项目。

答案 1 :(得分:0)

你有两种方法。

  1. 如果您的DLL是使用本机语言实现的,例如C / C ++。您可以从DLL导出C函数并使用其他语言调用它。大多数语言都可以直接或使用语言扩展来调用C函数,例如Ruby中的Win32API
  2. 使用COM(组件对象模型)。 COM旨在跨语言工作。这是优选的方法,因为它具有许多优点。您可以使用C#,C ++,Delphi和其他语言实现COM类,并使用其他语言,如该语言中的普通对象。