39

标题说明。我有本机 C++ dll,我正在为其编写 C++/CLI 包装器,这些 dll 反过来将作为参考导入到 C# 中。

问题是在 C# 中我看不到包装器中的类(从 DLL 导入)。

我应该使用哪些关键字以及如何重新声明我的本机 C++ 对象以在 C# 中可见?

4

1 回答 1

79

好的,教程。您有一个NativeClass要向 C# 公开的 C++ 类。

class NativeClass { 
public:
    void Method();
};

1) 创建一个 C++/CLI 项目。链接到您的 C++ 库和头文件。

2)创建一个包装类,公开你想要的方法。例子:

#include "NativeClass.h"

public ref class NativeClassWrapper {
    NativeClass* m_nativeClass;

public:
    NativeClassWrapper() { m_nativeClass = new NativeClass(); }
    ~NativeClassWrapper() { this->!NativeClassWrapper(); }
    !NativeClassWrapper() { delete m_nativeClass; }
    void Method() {
        m_nativeClass->Method();
    }
};

3) 在 C# 项目中添加对 C++/CLI 项目的引用。

4)在 using 语句中使用包装器类型:

using (var nativeObject = new NativeClassWrapper()) {
    nativeObject.Method();
}

using 语句确保 Dispose() 被调用,它立即运行析构函数并销毁本机对象。否则,您将出现内存泄漏,并且可能会死得很惨(不是您,程序)。注意:Dispose() 方法是为您神奇地创建的

于 2012-04-19T08:04:34.157 回答