我正在使用C++/CLI for C Library。我在网上搜索了一下。我有几个关于它的链接。
Mixed mode C++/CLI performance considerations - best practices
我正在开发一个C++/CLI DLL,它将包装一个C静态库。
我真的想在这里讨论的一个建议是“不应该在包装器中混淆托管和非托管C++代码”。我不明白它的意思。
当然,托管DLL将包含托管C++代码和非托管C++代码。
包装的目的是将来自静态库的调用转换为托管代码DLL。
请消除我的疑虑--我想对此发表意见。
发布于 2011-10-21 14:17:25
如果你有一个常规的CLI库(非C++ ),出于性能的原因,你应该避免打开这个库的“CLI”编译选项。
相反,创建一个只包含包装器类的库是一种好的做法。这个库当然是C++/CLI,它将创建一个可以被常规.Net库引用的程序集。
因此,这可能就是建议要讨论的内容--为您的CLI包装器创建一个包装器库
--更新问题的附录
托管C++/CLI类不应包含非托管代码,因为它/不能/包含许多类型的非托管代码。
例如,C++/CLI类不能有任何非引用或指针的非托管成员变量。这是因为.Net运行时垃圾收集器可能会在任何时候决定将对象放在内存中的其他地方(这就是您需要固定内存等的原因)。如果GC决定将原生C++对象移动到内存中的其他位置,这可能会使指向该对象的任何指针无效。这显然很糟糕。
C++/CLI是一种很棒的语言。但是,如果您使用它,您应该决定编写纯.Net代码,或者应该将它用作本机C++和.Net之间的接口。在同一个类中混用内存模型只会使事情变得混乱。
https://stackoverflow.com/questions/7845149
复制相似问题