我有一个由C#语言创建的dll文件。我希望可以从一个C++项目中使用这个dll文件中用C#语言编写的函数。我知道在C#项目中可以使用C# DLL,但不知道在C++项目中使用C# DLL的最佳方法。 我正在使用Visual Studio 2013。非常感谢您的指导。
我有一个由C#语言创建的dll文件。我希望可以从一个C++项目中使用这个dll文件中用C#语言编写的函数。我知道在C#项目中可以使用C# DLL,但不知道在C++项目中使用C# DLL的最佳方法。 我正在使用Visual Studio 2013。非常感谢您的指导。
我将总结一下通过COM将C#类暴露给C++的基本步骤。假设您有以下C#类:
public class Number
{
public Number()
{
}
public int Value
{
get;
set;
}
}
首先,您需要创建一个接口来实现类。只有通过该接口公开的方法和属性对COM(因此也对C ++)可见。通常,此接口与类具有相同的名称,但带有“I”前缀:
public interface INumber
{
int Value
{
get;
set;
}
}
接下来,您需要在接口和类中添加ComVisible 和Guid 属性。同时建议在类中添加 [ClassInterface(ClassInterfaceType.None)]:
[ComVisible(true)]
[Guid("71CACDF6-B6CD-4A46-B951-02E5C542852C")]
public interface INumber
{
...
[ComVisible(true)]
[Guid("B5809A32-A066-42E3-96D7-09FE622BC994")]
[ClassInterface(ClassInterfaceType.None)]
public class Number : INumber
{
...
我使用Visual Studio自带的GUID工具获得了GUID。您可以在C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools找到它。
C#方面就这些了。在构建C# DLL之后,您需要使用Regasm.exe命令行实用程序将其注册到COM中。启动命令提示符并键入以下命令:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Tools\vsvars32"
Regasm ExampleDLL.dll /codebase /tlb
(如果您的VS安装路径不同,可能需要修改第一个命令)
现在,您可以像这样从C++中使用DLL:
#include <iostream>
#import "ExampleDLL.tlb" // This is a file that should have been generated by Regasm.exe
using namespace std;
using namespace ExampleDLL;
int main()
{
CoInitialize(NULL);
INumberPtr pNumber;
pNumber.CreateInstace(__uuidof(Number));
pNumber->Value = 5;
cout << pNumber->Value;
return 0;
}
更多细节请参见将.NET Framework组件公开为COM对象。