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

本文关键字:创建 dll 文件 调用 c++ 项目 | 更新日期: 2023-09-27 18:03:09

我有一个用c#语言创建的dll文件。我想使用c#语言编写的函数在dll文件中,从一个c++项目。我知道这是可能使用c# dll与c#项目。但是不知道在c++项目中做c# dll的最好方法是什么。我用的是visual studio 2013。非常感谢您的指导。

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

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