c – 交叉编译库通信
我需要使用MSVC开发一个C前端GUI,需要与使用C Builder编译的bank-end库进行通信.
我们如何定义接口以便不会遇到CRT库问题? 例如,我相信我们将无法安全地来回传递STL容器.真的吗? 我知道我可以安全地传递POD类型,但我希望我也可以使用一些更复杂的数据结构. 解决方法
你可能会发现这篇文章很有趣
Binary-compatible C++ Interfaces.一般的教训是,永远不要传递STL容器,提升或任何类似的东西.与其他两个答案一样,您最好的选择是坚持使用指定的调用约定的POD和函数.
由于STL的实现因编译器而异,因此传递STL类是不安全的.然后,您可以要求用户使用STL的特定实现(也可能是特定版本),或者只是不使用库之间的STL. 进一步坚持使用调用约定,其中行为可以被认为是交叉编译器.例如,__cdecl和__stdcall将在大多数编译器上同等处理,而__fastcall调用约定将是一个问题,特别是如果您希望在C Builder中使用代码. 正如文章“Binary-compatible C Interface”所提到的,你也可以使用界面,只要你记住一些基本原则. >始终使接口成为纯虚拟类(这不是实现). 如果您选择使用C接口,您可能希望阅读有关组件对象模型(COM)的更多信息,以了解这将如何以及为何能够跨编译器工作. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |