其他分享
首页 > 其他分享> > c – 交叉编译库通信

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”所提到的,你也可以使用界面,只要你记住一些基本原则.

>始终使接口成为纯虚拟类(这不是实现).
>确保对界面中的成员函数使用正确的调用约定(文章提到了__stdcall for Windows.
>保持内存清理DLL边界的同一侧.
>还有很多其他的东西,比如不使用异常,不要在界面中重载函数(编译器对待它的方式不同)等等.在文章的底部找到它们.

如果您选择使用C接口,您可能希望阅读有关组件对象模型(COM)的更多信息,以了解这将如何以及为何能够跨编译器工作.

标签:c,visual-c,cbuilder,cross-compiling
来源: https://codeday.me/bug/20190730/1581213.html