如何重载DLL中的类中的函数???

m88er 2007-05-10 10:56:16
我的工程包含一个DLL,我写了一个类A继承dll中的类B,现在想重载B的函数实现多态,但好像不行。代码类似下面这样:

//mylib.dll中的类A

class A
{
protected:

public:
// Init & Finish
__declspec(dllexport) A( TCHAR *sName );
__declspec(dllexport) virtual ~A();
__declspec(dllexport) virtual void foo();
...
};

//myApp.exe应用程序中的类B

#include "a.h"
class B:public A
{
B( TCHAR *sName );
virtual ~B();
virtual void foo();
};
...

在主函数中调用:
void main(void)
{
...
A *a;
a = new B(_T("mb"));
a.foo();//断点跟踪还是运行的A::foo
...
}

是和__declspec(dllexport)定义有关系吗,有啥好办法解决。
...全文
239 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
m88er 2007-05-10
  • 打赏
  • 举报
回复
绝对已经正确导出了,就是不能实现多态。
houdy 2007-05-10
  • 打赏
  • 举报
回复
我觉得在DLL中导出类和导出函数本质上没有什么区别:
1.对于类的成员函数(包括虚函数),导出的是经过修饰的函数符号(类名+函数名+参数).
2.对于类的静态成员(包括变量和函数),导出的应该和全局变量/函数差不多,只不过这里有一个类作用域.
3.对于类包含虚函数,实际上还应该导出虚表,虚表是与常量的形式导出的,但是我们通常不会主动使用这个虚表常量.我在我的一篇BLOG中讨论过这个问题:
http://blog.csdn.net/houdy/archive/2007/01/28/1496161.aspx

在使用这个类之前,要保证这个类已经被正确导出了.可以使用Dependency Walker来检查DLL导出的情况.
lightnut 2007-05-10
  • 打赏
  • 举报
回复
1. 在"a.h"中
#if defined (MYLIB_EXPORTS)
#define MYLIB_API __declspec(dllexport)
#else
#define MYLIB_API __declspec(dllimport)
#endif

class MYLIB_API A
{
.......
};

2. 在你的mylib.dll项目属性中添加MYLIB_EXPORTS定义

taodm 2007-05-10
  • 打赏
  • 举报
回复
神啊,多少次了,不要在dll里导出类!
你还要在导出类上再继承,真是更狠。
m88er 2007-05-10
  • 打赏
  • 举报
回复
给分吧,dll中的那个函数原来不是虚函数,害死人了。

64,266

社区成员

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

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