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

时间:2012-05-16 14:21:42

标签: c# winapi dllimport

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

如果我调用Assembly.LoadFrom(),VS会抛出一个未处理的异常,因为模块中没有包含清单。

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

如何调用其中一个成员函数?

2 个答案:

答案 0 :(得分:2)

使用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;
    }
};

答案 1 :(得分:1)

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

对于非托管程序集P/Invoke是必需的。

How to Marshal c++ class