首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为静态库设计托管DLL (C++/CLI)

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

Stack Overflow用户
提问于 2011-10-21 13:01:12
回答 1查看 2.4K关注 0票数 3

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

Mixed mode C++/CLI performance considerations - best practices

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

我真的想在这里讨论的一个建议是“不应该在包装器中混淆托管和非托管C++代码”。我不明白它的意思。

当然,托管DLL将包含托管C++代码和非托管C++代码。

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

请消除我的疑虑--我想对此发表意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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之间的接口。在同一个类中混用内存模型只会使事情变得混乱。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7845149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档