如何在 C# 代码中访问 c++ dll 类

本文关键字:访问 c++ dll 代码 | 更新日期: 2023-09-27 18:34:25

我的第三方dll中有一个C++类。

如果我调用 Assembly.LoadFrom(),VS 会引发一个未经处理的异常,因为模块中不包含清单。

我可以使用 DllImport 调用全局函数来获取某个类的实例。

然后如何调用其成员函数之一?

如何在 C# 代码中访问 c++ dll 类

使用 C++/CLI 创建包装器 DLL 公开C++函数

例如:

//class in the 3rd party dll
class NativeClass
{
    public:
    int NativeMethod(int a)
    {
        return 1;
    }   
};
//wrapper for the NativeClass
class ref RefClass
{
    NativeClass * m_pNative;
    public:
    RefClass():m_pNative(NULL)
    {
        m_pNative = new NativeClass();
    }
    int WrapperForNativeMethod(int a)
    {
        return m_pNative->NativeMethod(a);
    }
    ~RefClass()
    {
        this->!RefClass();
    }
    //Finalizer
    !RefClass()
    {
        delete m_pNative;
        m_pNative = NULL;
    }
};

Assembly.LoadFrom 用于加载托管程序集。

对于非托管程序集,需要 P/Invoke。

如何封送 c++ 类