2

我按照CodeProject的指南构建了一个带有抽象接口的 DLL,并使用extern "C"命令导出了工厂函数__declspec(dllexport),并且__cdecl通过这样做,文章声称 DLL 变得独立于编译器,具有干净的接口。但是,当在两个不同版本的 g++ 上使用 DLL 时,非标准 ABI 在调用 DLL 时会产生标准 c++ 问题。除了 CodeProject 文章之外,我还使用了MinGW的一篇文章,以便能够创建该类的多个实例。

那么如何使 DLL 编译器独立呢?如果这是不可能的,那么是否可以在 DLL 中实例化一个类并使函数成为纯 C,但调用与实例化类相关的 C++ 函数?

4

1 回答 1

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);

这行得通。我不知道你到底尝试了什么,什么对你不起作用,只是没有足够的信息可以说明。

于 2013-05-22T19:25:37.867 回答