使用.def模块定义文件如何导出类?

cdeee 2005-05-29 03:01:33

不想使用__declspec(dllexport)而单独使用.def文件导出类,不知道如何实现?
...全文
1386 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cdeee 2005-06-16
  • 打赏
  • 举报
回复

使用虚拟基类太麻烦了,如果这样的话我还不如用两个头文件,一个使用__declspec(dllexport)导出,另一个使用__declspec(dllimport)导入。

有没有什么办法直接在 .def 模块中导出类啊?
BigFanOfCpp 2005-06-16
  • 打赏
  • 举报
回复
.DEF文件里只能写导出的函数符号名,我没有写过类名.
所以如果你要导出类的话,就要用__declspec(dllexport),或者用楼上说的"代理类"的方法,如果你想获得更深入的了解,我建议你参考<<COM本质论>>的第一章.
chy317chy 2005-06-15
  • 打赏
  • 举报
回复
1,把你要从dll输出的每个类,都设计一个基类,这是个纯虚,即所有函数都是“virtual...=0;”的。把这些写成一个.h;

2,把dll里的类都从相应的基类派生,并实现每一个纯虚函数。并给dll设计一个可动态导出的函数,这个函数里 return new CxxxInDll;

3,在调用dll的程序里定义纯虚基类的指针,并赋予第二步返回的值。

现在可以动态加载、调用dll里的类了。看看COM原理,你就有启发了。熟练了后会发现这个方法在小型应用里非常有效!(在大型应用里,由于缺乏生存期控制,所以不安全)

需要补充的是:需要为每个类增加定义一个Release函数,函数里delete this,不要在调用dll的程序里直接delete从第二步获得的指针。
idAnts 2005-06-15
  • 打赏
  • 举报
回复
挨个把成员函数成员变量写一遍:
CXXX::Fxx @1
duxianghe 2005-06-15
  • 打赏
  • 举报
回复
类应该是一样的。
duxianghe 2005-06-15
  • 打赏
  • 举报
回复
; 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
cdeee 2005-05-30
  • 打赏
  • 举报
回复

没人知道啊?:(

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧