不想使用__declspec(dllexport)而单独使用.def文件导出类,不知道如何实现?

解决方案 »

  1.   

    ; MFCDll.def : Declares the module parameters for the DLL.LIBRARY      "MFCDll"
    DESCRIPTION  'MFCDll Windows Dynamic Link Library'EXPORTS
        ; Explicit exports can go here
    Create @1
    Destroy @2
    StartDisplay @3
    StopDisplay @4
        CaptureImg @5
        GetDeviceParam @6
        ReadVideoParam @7
        SetVideoParam @8
      

  2.   

    挨个把成员函数成员变量写一遍:
     CXXX::Fxx @1
      

  3.   

    1,把你要从dll输出的每个类,都设计一个基类,这是个纯虚,即所有函数都是“virtual...=0;”的。把这些写成一个.h;2,把dll里的类都从相应的基类派生,并实现每一个纯虚函数。并给dll设计一个可动态导出的函数,这个函数里 return new CxxxInDll;3,在调用dll的程序里定义纯虚基类的指针,并赋予第二步返回的值。现在可以动态加载、调用dll里的类了。看看COM原理,你就有启发了。熟练了后会发现这个方法在小型应用里非常有效!(在大型应用里,由于缺乏生存期控制,所以不安全)需要补充的是:需要为每个类增加定义一个Release函数,函数里delete this,不要在调用dll的程序里直接delete从第二步获得的指针。
      

  4.   

    .DEF文件里只能写导出的函数符号名,我没有写过类名.
    所以如果你要导出类的话,就要用__declspec(dllexport),或者用楼上说的"代理类"的方法,如果你想获得更深入的了解,我建议你参考<<COM本质论>>的第一章.
      

  5.   


        使用虚拟基类太麻烦了,如果这样的话我还不如用两个头文件,一个使用__declspec(dllexport)导出,另一个使用__declspec(dllimport)导入。    有没有什么办法直接在 .def 模块中导出类啊?