【发布时间】:2014-02-03 11:06:42
【问题描述】:
这是一个验证我的推理的问题。
无论如何,我正在开发一个支持插件(在运行时动态加载的库)的复杂项目,现在我希望能够使用编译器 X 编译主程序,并使用编译器 Y 编译插件,并且该插件仍然有效。 但是我需要在插件和主程序之间传递复杂的数据。
所以我的理解是,只要我知道它们将执行相同基本代码的地址,标准函数就可以了,编译器无关紧要。
但是,当涉及到结构时,由于编译器之间的对齐/打包方法不同,2 个相同的结构可能不一样,但是我可以在大多数编译器上使用 #parama pack(n) 覆盖它,只要这是相同的这些结构的内存结构将匹配,以便它们可以在插件和主程序之间传递。
那么我相信这也适用于基本类,只要没有虚函数,并且所有成员变量都是公共的。
但是我不能依赖成员函数的调用约定,所以我必须要么通过将对象作为参数的标准函数映射它们,要么在插件命名空间中重新实现它们,很可能通过与其链接的库反对。
此外,只要按上述方式实现,我应该能够为结构/类实现运算符和成员函数。
因此我可以使用它在插件和程序之间传递复杂的数据,即使它们是用不同的编译器编译的。
我的理解是否正确?
【问题讨论】:
标签: c++ memory compiler-construction struct shared-libraries