为静态库设计托管DLL (c++ /CLI)

  • 本文关键字:c++ CLI DLL 静态 c++ c++-cli
  • 更新时间 :
  • 英文 :


我正在使用c++/CLI for C库。我在网上搜索了一下。我有几个相关的链接。

混合模式c++/CLI性能考虑-最佳实践

我正在开发一个c++/CLI DLL,它将包装一个C静态库。

有一个建议,我真的想在这里讨论的是"一个人不应该混淆托管和非托管的c++代码在包装器"。我不明白这是什么意思。

托管的DLL当然包含托管的c++代码和非托管的c++代码。

包装器的目的是将来自静态库的调用转换为托管代码DLL。

请澄清我的疑问-我想对此发表意见。

如果您有一个常规的c++库(非CLI),出于性能原因,您应该避免为该库打开'CLI'编译选项。

相反,创建一个只包含包装器类的库是一个很好的实践。这个库当然是c++/CLI,它将创建一个程序集,可以被常规的。net库引用。

所以这可能就是建议要讨论的-为您的CLI包装器创建一个包装器库

——更新后问题的附录

托管c++/CLI类不应该包含非托管代码,因为它不能包含许多类型的非托管代码。

例如,c++/CLI类不能有任何非引用或指针的非托管成员变量。这是因为。net运行时垃圾收集器可能会决定在任何时候将对象放在内存中的其他位置(这就是您需要固定内存等的原因)。如果GC决定将本地c++对象移动到内存中的其他位置,这可能会使指向该对象的指针失效。这显然很糟糕。

c++/CLI是一个伟大的语言。但是,如果您使用它,则应该决定编写纯。net代码,或者将其用作本机c++和。net之间的接口。在同一个类中使用混合的内存模型只会让事情变得混乱。

最新更新