c++ - 包装非托管 C++ 类以便 .Net 托管客户端应用程序可以使用它们的最佳方法是什么?

标签 c++ .net pinvoke marshalling

我们有一个 win32 C++ 非托管库(它在幕后调用 Boost 和 openCV)。 该库包含几个公共(public)类定义。 这些类本身公开了几个方法,其参数包括 vector 、共享指针 和回调作为其方法签名的一部分。

我们想创建一个包装器,允许 .Net(托管)客户端使用这些类。 我们希望保留对现有非托管客户端应用程序的支持。所以我想这必须是 一个单独的 DLL/库。另一个考虑因素是跨托管/非托管的性能编码 边界。我们将在客户端应用程序和库之间来回推送图像的字节数组 每秒 30-50 次的速率。

执行此操作的最佳方法是什么?

有人可以为我指明任何示例实现、教程和策略的方向以帮助我们入门吗? 我上一次看到这样的东西已经是 10 多年前的事了。 我似乎依稀记得 pInvoke 和 IJW 的工作原理。

任何想法将不胜感激。

谢谢, 约翰B

最佳答案

我会创建一个围绕您的 native C++ 的托管 C++。 将 native C++ 编译成静态库,创建引用静态 C++ 库的托管 C++ DLL 并编写包装器代码。我已经做过几次,非常简单。

查看此示例:http://www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-minutes#A8

关于c++ - 包装非托管 C++ 类以便 .Net 托管客户端应用程序可以使用它们的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28908471/

相关文章:

c++ - 如何将 C++ 中的 QStringList 显示到 QML ListView

c++ - 从非常量到常量的转换示例

.net - 在 vb.net 中对字符串数组进行洗牌

C# 调用 native C++ 所有函数 : what types to use?

.NET PInvoke 异常处理

c# - 如何在 NuGet 包中包含一个 pinvoked dll?

c++ - 无法编译 boost spirit example4.cpp

c++ - C++ 中的类实例声明

.net - 在运行时创建测试

c# - 使用 key 将密码编码为 MD5