c# - 用于 native C++ 的 C++/CLI 包装器,可在 C# 中用作引用

标签 c# c++ dll c++-cli

标题解释。我有 native C++ dll,我正在为其编写 C++/CLI 包装器,这些 dll 又将作为引用导入到 C# 中。

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

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

最佳答案

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

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() 被调用,它立即运行析构函数并销毁 native 对象。否则,您将出现内存泄漏,并且可能会死得很惨(不是您,程序)。注:The Dispose() method is magically created for you .

关于c# - 用于 native C++ 的 C++/CLI 包装器,可在 C# 中用作引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10223186/

相关文章:

c# - Xamarin Forms 等待动画或事件完成

c++ - 使用 BIO_read 时的部分 HTTP 响应

c# - 如何使用 dll 作为不同机器的加载项?

C# 从 MP4 流中提取位图

c++ - 在 MVS 2010 的 C++ dll 中 try catch block

c# - Wpf:图像控制不支持 .TGA 文件

c# - 如何确定线程在哪个 CPU 上运行?

c++ - 我是否需要在显式加载的共享库之间隐式链接以进行交互?

c# - 尝试在 C# 中使 waveout 工作时 vhost.exe 崩溃

c++ - 如何在 C++ 中访问新主函数的参数?