【发布时间】:2015-03-06 22:05:08
【问题描述】:
我们有一个 win32 C++ 非托管库(在后台调用 Boost 和 openCV)。 该库包含几个公共类定义。 这些类本身公开了几个方法,其参数包括向量、共享指针 并将回调作为其方法签名的一部分。
我们想创建一个包装器,允许 .Net(托管)客户端使用这些类。 我们希望保留对现有非托管客户端应用程序的支持。所以我想这必须是 一个单独的 DLL/库。另一个考虑因素是跨托管/非托管的性能编组 边界。我们将在客户端应用程序和库之间来回推送图像的字节数组 每秒30-50次的速度。
这样做的最佳方法是什么?
有人可以为我指明任何示例实现、教程和策略的方向吗? 我最后一次看到这样的东西已经是 10 多年前了。 我似乎隐约记得 pInvoke 和 IJW 的工作原理。
任何想法将不胜感激。
谢谢, 约翰B
【问题讨论】:
-
如果这是一个高性能应用程序,那么我会避免如此频繁地与 .NET 进行数据传输。尝试找到一种方法来最大限度地减少执行的 .NET 代码量,尤其是在紧密循环中。我建议通过 COM 接口而不是托管 C++ 或任何类型的互操作来导出功能。
-
@Dai:感谢您的快速响应。大部分繁重的计算都是在非托管层中完成的。托管层捕获数据/图像,将其推送到非托管库进行处理,然后使用结果。你能扩展一下 COM 接口的想法吗?
标签: c++ .net pinvoke marshalling