我按照CodeProject上的指南编写了一个带有抽象接口的DLL,并使用extern "C"
命令以及__declspec(dllexport)
和__cdecl
导出工厂函数并执行操作这篇文章声称DLL变得独立于编译器,具有干净的接口。但是,当在两个不同版本的g ++上使用DLL时,非标准ABI会在DLL调用中创建标准c ++问题。除了CodeProject文章,我还使用了MinGW中的一篇文章,以便能够创建该类的多个实例。
如何才能使DLL编译器独立?如果这是不可能的,那么是否可以在DLL中实例化一个类并使函数纯C但调用与实例化类相关的C ++函数?
答案 0 :(得分:0)
您是否尝试过完全复制那里给出的示例?什么是失败?你不仅要考虑你的班级,而且不能直接使用像std::string
这样的任何其他班级。也就是说,我不会尝试重新发明轮子,而是使用某种类似COM的组件框架。
要回答你的第二部分,请考虑一下:
// internal class
struct X
{
void jump();
};
// compiler-independent C interface
struct X;
struct X* x_alloc(void);
void x_jump(struct X* x, float height);
void x_free(struct X* x);
这很有效。我不知道你究竟尝试了什么,什么对你不起作用,只是没有足够的信息可以告诉你。