关于DLL导出函数的问题

WilliamJ 2006-04-19 10:55:04
我看到某个库有一个抽象类,类成员函数全是纯虚的,但是这些函数前面没加类似 dll_export的导出修饰符,却可以在加载DLL后调用这些函数,请问这是怎么实现的?
...全文
201 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnny_de 2006-04-21
  • 打赏
  • 举报
回复
干吗不给我分!
WilliamJ 2006-04-20
  • 打赏
  • 举报
回复
谢谢大家!
的确是有该类的头文件,并且该类和成员函数都没dll导出符.
这我就不懂了,只有头文件,没有声明导出,那么客户的程序怎么找到dll中相应的成员函数呢?
是怎么个原理啊?还是这些成员函数的实现代码都在dll对应的.lib文件中,而不在dll中?

JohnTitor(贱畜)说:" 在加载了dll后,客户端肯定会调用该dll的一个导出函数来获得该抽象类的一个子类实例的指针,然后通过该指针,就可以调用那些头文件中定义的虚函数了",这句话我不是太明白,能否给一个短的实例代码?
healer_kx 2006-04-20
  • 打赏
  • 举报
回复
是的,这个和COM很像了。
虚接口是不用导出的。
相反,你在这个接口内有函数实现的话,你的客户程序调用这个函数,如果没有导出,就链接不上了。

Johnny_de 2006-04-20
  • 打赏
  • 举报
回复
我比较赞同sankt(黄景天) ( ) 信誉:110 的看法,这和COM原理是一样的。
逸学堂 2006-04-20
  • 打赏
  • 举报
回复
dll本身不可能导出纯虚函数,lz看看是否有包含这个dll中这个类的头文件。
或者如同sankt(黄景天)说的在.def文件中指明了导出类。
sankt 2006-04-20
  • 打赏
  • 举报
回复
也有可能是在.def文件指明了导出类
WilliamJ 2006-04-20
  • 打赏
  • 举报
回复
太谢谢 这位仁兄了:
JohnTitor(贱畜) ( ) 信誉:100 2006-04-20 14:13:00 得分: 0

解开了我所有疑问,给分,给分喽.
JohnTitor 2006-04-20
  • 打赏
  • 举报
回复
比如你头文件中的抽象类为IBase,那么dll可能会导出一个函数IBase* CreateInstance(),
该函数在dll中创建一个IBase派生类的对象,并且返回该对象的指针给你。你在客户端中因为有
IBase类的头文件,所以可以定义一个IBase的指针,如IBase* pInst;所以可以通过
调用pInst = CreateInstance()来获得dll中IBase派生类的对象的地址,而后通过pInst来
调用那些头文件中的虚函数,而又因为这些都是虚函数,所以实际调用的是dll中的IBase派生类
所重写的虚函数。
JohnTitor 2006-04-19
  • 打赏
  • 举报
回复
类成员函数全是纯虚的,没有实现代码,就不需要导出了,只需要有这个类的头文件就可以使用了。这和com的接口是一样的,在加载了dll后,客户端肯定会调用该dll的一个导出函数来获得该抽象类的一个子类实例的指针,然后通过该指针,就可以调用那些头文件中定义的虚函数了
llf_hust 2006-04-19
  • 打赏
  • 举报
回复
可能别人事导出的整个类吧

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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