如何从c ++项目中调用用c#创建的dll文件?

时间:2015-07-16 05:09:49

标签: c# c++ .net dll visual-studio-2013

我有一个用c#语言创建的dll文件。我想在c ++项目的dll文件中使用用c#语言编写的函数。 我知道可以在c#项目中使用c#dll。但不知道在c ++项目中执行c#dll的最佳方法是什么。我正在使用2013年的视觉工作室。所有的指导都非常感谢。

1 个答案:

答案 0 :(得分:2)

我将总结通过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;
}

有关详细信息,请参阅Exposing .NET Framework Components to COM