【问题标题】:C++ compiler independent DLLs using abstract interface使用抽象接口的 C++ 编译器独立 DLL
【发布时间】:2013-05-22 16:49:23
【问题描述】:
我按照 CodeProject 的指南构建了一个带有抽象接口的 DLL,并使用 extern "C" 命令以及 __declspec(dllexport) 和 __cdecl 导出了工厂函数,通过这样做,文章声称 DLL 变为编译器独立,界面简洁。然而,当在两个不同版本的 g++ 上使用 DLL 时,非标准 ABI 在调用 DLL 时产生了标准 c++ 问题。除了 CodeProject 文章之外,我还使用了来自 MinGW 的文章,以便能够创建该类的多个实例。
那么如何使 DLL 编译器独立?如果这不可能,那么是否可以在 DLL 中实例化一个类并使函数成为纯 C 但调用与实例化类相关的 C++ 函数?
【问题讨论】:
标签:
c++
dll
g++
abstract-class
【解决方案1】:
您是否尝试过完全重现那里给出的示例?失败是什么?您必须考虑到不仅您的课程,而且任何其他课程(如 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);
这行得通。我不知道你到底尝试了什么,什么对你不起作用,只是没有足够的信息可以说明。