【发布时间】:2011-01-16 04:19:52
【问题描述】:
我有一个使用 DirectX 的本机 C++ DLL,我希望能够通过 C# 使用它来创建内容创建工具。
添加 COM 似乎需要相当大的努力。 是否可以使用 P/Invoke 来维护使用多态性的类,还是需要我封装大部分代码以方便使用 P/Invoke?
有更好的解决方案吗?或者我是否应该考虑使用 Qt 用 C++ 编写工具?
【问题讨论】:
标签: c# c++ com directx pinvoke
我有一个使用 DirectX 的本机 C++ DLL,我希望能够通过 C# 使用它来创建内容创建工具。
添加 COM 似乎需要相当大的努力。 是否可以使用 P/Invoke 来维护使用多态性的类,还是需要我封装大部分代码以方便使用 P/Invoke?
有更好的解决方案吗?或者我是否应该考虑使用 Qt 用 C++ 编写工具?
【问题讨论】:
标签: c# c++ com directx pinvoke
在进行 C# 到 C++ 互操作时,我一直认为 C++/CLI 始终是最佳选择。您可以轻松地为非托管库创建瘦包装器,该包装器在 C# 代码中看起来与托管库完全一样。它还使您可以更好地控制封送和固定的执行方式。
我相信有一些方法可以自动生成 C++/CLI,但我从未使用过。
更多关于 C++/CLI 的信息在这里: http://msdn.microsoft.com/en-us/magazine/cc163681.aspx
【讨论】:
我认为直接从 C# 使用 D3D 进行渲染不是一种选择? (因为那肯定会更容易!)
很久以前,我使用SWIG 来自动维护我的C++ 渲染DLL 代码的C#“绑定”。它使用 P/Invoke 在 C# 端公开 C++ 对象,您不必再维护该代码。
【讨论】:
你不需要在 QT 上写 wrap。
我建议你用 C# 和 C++ 编写 Observer 类,并隐藏对它的 Native 函数调用。 架构是这样的
您在 C# 中的代码 -> Observer(C#) -> 对 Observer(C++) 的本机调用 -> 对您的 dll 的调用。
【讨论】: