【问题标题】: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);
    

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

    【讨论】:

      猜你喜欢
      • 2012-06-06
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多