如何继承Ehlib中的控件

csdn_tw 2011-12-08 09:30:58
Enlib控件功能强大,我想从其中的TDBNumberEditEh类继承,自定义一个新的控件,方法同继承VCL中自带的控件一样,但是在编译时报错:
[Linker Error] Unresolved external '__fastcall Dbctrlseh::TCustomDBEditEh::PaintWindow(void *)' referenced from C:\DOCUMENTS AND SETTINGS\TJFH-TIANW\桌面\DBNUMBEREDITEH1.OBJ

试过好多方法都不能解决,各位高手帮帮忙吧。
...全文
219 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn_tw 2011-12-12
  • 打赏
  • 举报
回复
搞定了,谢谢!刚才没看清,应该用TCustomMaskEdit::PaintWindow(DC)
而不是TCustomDBEditEh::PaintWindow(DC),不过这是为什么啊,难道在TCustomDBEditEh中也没有实现PaintWindow ?
csdn_tw 2011-12-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 ksrsoft 的回复:]
cpp的实现改成
void __fastcall tcustomdbeditEh1::PaintWindow(HDC DC)
{
TCustomMaskEdit::PaintWindow(DC);
}
[/Quote]

按你说的试了一下,还是提示那个链接错误,而且我继承的TDBNumberEditEh,你说的是继承TCustomMaskEdit,这个有影响么,我现在把控件的头文件改了,把PaintWindow的虚函数声明给注释掉了,倒是行了,但感觉不好。在你的环境下测试通过么,我用的是bcb5
缘中人 2011-12-12
  • 打赏
  • 举报
回复
cpp的实现改成
void __fastcall tcustomdbeditEh1::PaintWindow(HDC DC)
{
TCustomMaskEdit::PaintWindow(DC);
}
缘中人 2011-12-12
  • 打赏
  • 举报
回复
刚试了一下,Delphi继承TCustomDBEditEh没问题,不用任何特殊处理,我再看看cb吧
jacknes009 2011-12-12
  • 打赏
  • 举报
回复
参数函数带的不同而已
csdn_tw 2011-12-09
  • 打赏
  • 举报
回复
楼上仁兄,我按你的方法试了,还是不管用,在你的环境下能通过么
勉励前行 2011-12-09
  • 打赏
  • 举报
回复
將 ehlibXX.bpi 加入需要包中。
將ehlibXX.bpi ehlibXX.lib 所在的路徑加入到庫路徑中。

缘中人 2011-12-08
  • 打赏
  • 举报
回复
如果在派生类中没有对虚函数重新定义,则它继承其基类的虚函数。
但这里报错维护,也没研究。
http://baike.baidu.com/view/161302.htm
csdn_tw 2011-12-08
  • 打赏
  • 举报
回复
再请教一下,继承的时候,父类的虚函数一定要实现么,c++那点东西有点搞不清了
缘中人 2011-12-08
  • 打赏
  • 举报
回复
写清楚了
h、cpp文件加上那几行就行了
csdn_tw 2011-12-08
  • 打赏
  • 举报
回复
谢谢,问题怎么实现,我不想动其他函数,是不是在头文件里声明一下这个函数就可以。另外这个第三方控件为什么会这样,还要我们关照一下虚函数。请不吝赐教
缘中人 2011-12-08
  • 打赏
  • 举报
回复
是虚函数,没实现。在你的代码里加上实现就可以了
缘中人 2011-12-08
  • 打赏
  • 举报
回复
h文件

protected:
void __fastcall PaintWindow(HDC DC);

cpp文件

void __fastcall tcustomdbeditEh1::PaintWindow(HDC DC)
{

}
csdn_tw 2011-12-08
  • 打赏
  • 举报
回复
跟踪结果显示,派生控件没有执行基类的PainWindow函数,而是执行了
void __fastcall tcustomdbeditEh1::PaintWindow(HDC DC)
{

}

可是如果不声明这个函数,又出现
[Linker Error] Unresolved external '__fastcall Dbctrlseh::TCustomDBEditEh::PaintWindow(void *)' referenced from C:\DOCUMENTS AND SETTINGS\TJFH-TIANW\桌面\DBNUMBEREDITEH1.OBJ

真是头疼死了
csdn_tw 2011-12-08
  • 打赏
  • 举报
回复
试了一下,按照这样写控件,生成的派生类表现不正常,给Value属性赋值后,Edit框中显示空白,必须在点一下才能显示,估计是PaintWindow的缘故
csdn_tw 2011-12-08
  • 打赏
  • 举报
回复
刚看了百度的资料,还有点不明白,到底怎么样算是重定义虚函数
protected:
void __fastcall PaintWindow(HDC DC);


看了资料,按照这样声明,应该是重定义,那就应该执行这个了
void __fastcall tcustomdbeditEh1::PaintWindow(HDC DC)
{

}



缘中人 2011-12-08
  • 打赏
  • 举报
回复
不能加virtual了。
csdn_tw 2011-12-08
  • 打赏
  • 举报
回复
按照你说的问题解决了,另外这里的声明前面还用不用加virtual
protected:
void __fastcall PaintWindow(HDC DC);

是不是一结贴就不能回复了

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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