用于本机C++的C++/CLI包装器,用作C#中的引用

Hai*_*x64 32 c# c++ dll c++-cli

标题解释.我有原生的C++ dll,我正在编写C++/CLI包装器,而这些包装器又将作为参考在C#中导入.

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

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

Asi*_*sik 68

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

class NativeClass { 
public:
    void Method();
};
Run Code Online (Sandbox Code Playgroud)

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();
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

using (var nativeObject = new NativeClassWrapper()) {
    nativeObject.Method();
}
Run Code Online (Sandbox Code Playgroud)

using语句确保调用Dispose(),它会立即运行析构函数并销毁本机对象.否则你会有内存泄漏,可能会死得很厉害(不是你,程序).注意:为您神奇地创建了Dispose()方法.

  • 为了避免4)的内存泄漏,您还应该实现finalizer!NativeClassWrapper();。垃圾收集器将调用它 (2认同)