代码之家  ›  专栏  ›  技术社区  ›  Alex Che

将类从可执行文件导出到dll

  •  3
  • Alex Che  · 技术社区  · 17 年前

    virtual (这样DLL链接器就不需要这些方法的定义)。这种方法的缺点:

    1. 我无法创建导出类的对象 在DLL代码中使用 new (a必须 在中创建其他功能
    2. 虚拟 , 即使不是这样,他们也不需要 是 虚拟 .

    __declspec(dllexport)

    3 回复  |  直到 17 年前
        1
  •  3
  •   Baiyan Huang    17 年前

    据我所知,使用MS VS的dllexport从exe导出类或函数并在DLL中使用是可以的。如果你的DLL和Exe执行,它运行起来很酷 在一个过程中 .

        2
  •  2
  •   Eric Petroelje    17 年前

    如果你真的不想把这个类放在第一个DLL中,你可以把它放在第二个DLL中。

    ETA: 又挖了一些,发现了 this link

        3
  •  0
  •   Eric Petroelje    17 年前

    好的,根据这里的新信息给出新的答案。如果你不能用编译器为EXE生成导出库,而你真的必须这样做,这里有一个创造性的、黑客的、通常不推荐的解决方案:

    步骤1:为你的类创建一个C包装器API,有点像这样(可能不会编译,但你明白了):

    // Yes, need some 32 bit/64 bit checks here
    #define MYHANDLE unsigned int
    
    __declspec(dllexport) MYHANDLE MyClassNewInstance() {
       MyClass* ptr = new MyClass();
       return (MYHANDLE)ptr;
    }
    
    __delspec(dllexport) MyClassDoSomething( MYHANDLE handle, int parm ) {
      MyClass* ptr = (MyClass*)handle;
      ptr->DoSomething(parm);
    }
    
    etc..
    

    步骤3:在DLL中创建代理类。代理类中的方法除了从EXE调用对应的C函数外,什么也不做。

    这将使类的“真实”实现不在DLL中。这是一个黑客,但它可能会奏效。