【问题标题】:Should I create a C++/CLI wrapper DLL for an unmanaged C++ DLL?我应该为非托管 C++ DLL 创建 C++/CLI 包装 DLL 吗?
【发布时间】:2011-12-29 15:58:48
【问题描述】:

我收到了一个包含多个类的非托管 C++ DLL。

我需要能够在 C# 中使用其中一些类。根据我目前的研究,听起来我需要创建一个 C++/CLI 包装 DLL 来处理托管和非托管类型之间的转换。我见过一些示例,其中基本上有人会为每个类创建一个 C++/CLI 版本,并且它将包含一个非托管 C++ 类型的实例。实现我在这里尝试做的最好方法是什么?非托管 DLL 中可能提供了 10-15 个类。现在我只需要使用其中的几个,但将来可能需要使用更多。谢谢!

【问题讨论】:

  • 如果 DllMain 就是这样,你也可以把它扔掉,因为它什么都不做。除此之外,亚历克斯是对的。另一种选择可能是 swig (swig.org),但是学习它的工作原理和修复所有警告所花费的时间可能会比编写 10 个包装器的时间更长,并且生成的代码会很丑陋并且可能难以阅读.

标签: c# c++ unmanaged command-line-interface managed


【解决方案1】:

是的,您需要为此库创建 C++/CLI 包装器,并在此包装器内部使用非托管类。对于暴露 C 风格 API 的非托管库,还有 PInvoke 选项,但它不适用于 C++ 类。

您也可以考虑制作 COM 包装器,如果您想在本机 COM 客户端和 .NET 中使用此库。但我认为制作 C++/CLI 包装器是一项更简单的任务。

【讨论】:

  • 我个人会选择 C++/CLI 包装器。像 stijn 一样,我也很想知道为此目的使用 swig 是否容易。这是我们可能希望以后做的事情。将来,看看 swig 是否也可以用于自动生成 WinRT 类可能也很有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-30
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多