为 DLL 制作 .NET 包装器
Making .NET Wrapper For DLL
我有一个使用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
使用模式适用于此处。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 生成.NET包装程序需要源代码吗
- 在 C# .NET 项目中使用 C++ 包装器
- C++ DLL 包装器 vb.net 传递字节数组的字节数组?
- AccessViolationException从托管C (ASP.NET的包装器)调用本机C 代码
- 动态加载.NET DLL包装C++DLL
- 为 DLL 制作 .NET 包装器
- C++.NET包装程序:试图读取或写入受保护的内存.这通常表示其他内存已损坏
- . net OpenCV包装器值得使用吗?
- 在Visual Studio上为.net构建64位的QUICKFIX.. NET c++ DLL包装器)
- .NET包装到C++代码:CS0122由于其保护级别错误而无法访问