请建议在 C# 和 C++ 之间传递数据的基础架构。

发布于 2024-11-07 22:23:37 字数 151 浏览 4 评论 0原文

我在此项目中使用 P/invoke 在 C# 和 C++ 之间进行互操作。我想传递对称定义的数据结构。最好使用什么基础设施?协议缓冲区在这里有用吗?

I'm using P/invoke to interoperate between C# and C++ in this project. I'd like to pass data structures that are symmetrically defined. What's the best infrastructure to use? Could protocol buffers be useful here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

森末i 2024-11-14 22:23:37

我建议使用 C++/CLI,因为您可以在两个世界中使用相同的头文件/定义文件。开发 C++ CLI 的主要目标之一是填补托管世界和非托管世界之间的空白。 这篇文章为您提供了更多优势。

在 MSDN 中有一个很好的描述 C++cli 的工作原理以及如何使用它。

另请参阅此处

I would suggest to use C++/CLI since you can use the same header files / definition files in both worlds. One of the main goals for developing C++ CLI was to fill the gap between the managed and the unamanaged world. This article gives you even more advantages.

In the MSDN there is a nice description how C++cli works and how you can use it.

see also here

罗罗贝儿 2024-11-14 22:23:37

如果可以的话,您可能想考虑使用 COM。定义 COM 可见且具有 InterfaceType ComInterfaceType.InterfaceIsDual 的 .NET 类,并使用 MarshalAs(UnmanagedType) 属性修饰每个参数,然后 C++ 应用程序可以封送可在托管代码和非托管代码之间传递的对象。

处理“对称定义”是因为接口是在 COM 中定义的,而且 COM 为您提供了比直接 P/Invoke 更多的错误处理和对正在发生的情况的可见性。

If it's an option, you may want to look into using COM. Define .NET classes that are COM visible and have the InterfaceType ComInterfaceType.InterfaceIsDual, and decorate each parameter with the MarshalAs(UnmanagedType) attribute, then the C++ app can marshal objects that can be passed between managed and unmanaged code.

The "Symmetrical definition" is handled because the interface is defined in COM, plus COM gives you a little more error handling and visibility into what is going on than straight P/Invoke.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文