为 DLL 制作 .NET 包装器

Making .NET Wrapper For DLL

本文关键字:包装 NET 制作 DLL      更新时间:2023-10-16

我有一个使用Qt在C++创建的DLL。但是我有项目文件可以在Visual Studio中打开它并对其进行编辑等等。我希望能够在我正在制作的 C# 应用程序中使用此库。那么,我需要对项目执行哪些操作才能使其在 C# 应用程序中可引用?

我正在阅读有关 PInvoke 的各种内容,制作 .NET 包装器等,但我不确定最佳选择是什么以及如何做到这一点。

可以通过在

解决方案中创建新的 C++/CLI 项目来为C++类创建 .NET 包装类,对于实际需要包装器的每个类,添加一个新项Managed.ClassName.cpp并查看下面的模式。

Managed.Rand.cpp(这将是 C++/CLI 项目中的新文件,假设您的本机项目称为"Logic",并且 Rand 类位于 Logic 命名空间中)

#include "../Logic/Rand.cpp"
using namespace System;
namespace Logic {
    namespace Managed {
        public ref class Rand {
            Logic::Rand * rand;
        public:
            Rand(UInt32 seed) { rand = new Logic::Rand(seed); }
            !Rand() { delete rand; }
            ~Rand() { this->!Rand(); }
            // Wrapper methods
            UInt32 Next() { return rand->Next(); }
        };
    }
}

请记住,!ClassName方法(一种析构函数)会导致类自动实现IDisposable,因此您应该将Managed.ClassName实例包装在 using 构造中,或者在完成后对它们调用Dispose。简而言之,通常的IDisposable使用模式适用于此处。