自己写继承组件从 TDBComboBox [DBCtrls] 会出错? bcb的bug?
大家可以新建一个定制组件,从TDBComboBox [DBCtrls]继承,什么代码也不写,编译竟然通不过,连接错误.
是BCB的bug吗?
问题点数:20、回复次数:8Top
1 楼xiaoshi0(Rain)回复于 2004-04-02 09:09:58 得分 0
不可能,我没有这样的情况Top
2 楼wcccc1(小猪义义)回复于 2004-04-02 09:42:12 得分 0
楼主是你自己的问题吧
Top
3 楼TryToday(超口术生命体)回复于 2004-04-02 14:00:21 得分 0
换了一台机子,还是不行.
如果哪位编译通过,请将代码发给我,谢谢:
miaohui010@sina.comTop
4 楼jishiping(JSP 季世平)回复于 2004-04-02 16:15:00 得分 0
不可能吧。你不要光说有错误,应该说出是什么错了,以及相应的代码。Top
5 楼gycxy(静水)回复于 2004-04-02 17:11:21 得分 0
你的类是怎么写的啊?能否列出来Top
6 楼TryToday(超口术生命体)回复于 2004-04-02 20:27:44 得分 0
冤枉,我一个字都没写,自动生成的,其他类没问题,就他毛病大,大家如果想看代码如下:
//DBComboBoxTest.h
//---------------------------------------------------------------------------
#ifndef DBComboBoxTestH
#define DBComboBoxTestH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Controls.hpp>
#include <DBCtrls.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TDBComboBoxTest : public TDBComboBox
{
private:
protected:
public:
__fastcall TDBComboBoxTest(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif
//DBComboBoxTest.cpp
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "DBComboBoxTest.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TDBComboBoxTest *)
{
new TDBComboBoxTest(NULL);
}
//---------------------------------------------------------------------------
__fastcall TDBComboBoxTest::TDBComboBoxTest(TComponent* Owner)
: TDBComboBox(Owner)
{
}
//---------------------------------------------------------------------------
namespace Dbcomboboxtest
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TDBComboBoxTest)};
RegisterComponents("System", classes, 0);
}
}
//---------------------------------------------------------------------------
错误信息:
[Linker Error] Unresolved external '__fastcall Dbctrls::TDBComboBox::ComboWndProc(Messages::TMessage&, int, void *)' referenced from C:\PROGRAM FILES\BORLAND\CBUILDER6\LIB\RELEASE\VCLE.LIB|_t_Dbctr
bpk文件不用看了吧,反正我看着挺乱.Top
7 楼jishiping(JSP 季世平)回复于 2004-04-02 22:16:16 得分 20
试了一下,果然有问题。只有自己重载一下虚拟函数 ComboWndProc 了。
class PACKAGE TDBComboBoxTest : public TDBComboBox
{
private:
protected:
void __fastcall ComboWndProc(TMessage &Message,
HWND ComboWnd, void * ComboProc);
public:
__fastcall TDBComboBoxTest(TComponent* Owner);
__published:
};
__fastcall TDBComboBoxTest::TDBComboBoxTest(TComponent* Owner)
: TDBComboBox(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TDBComboBoxTest::ComboWndProc(TMessage &Message,
HWND ComboWnd, void * ComboProc)
{
//看了一下源程序,源程序的 ComboWndProc 不只是继承 TCustomComboBox
//的ComboWndProc函数,它还对Style 为 csSimple时的WM_LBUTTONDOWN消息
//作了处理,但是源程序中用到了FDataLink,这个FDataLink的类型是私有的
//(private)。Delphi中继承的class可以访问父类私有的变量,但是C++不
//可以,所以这儿无法完全将源程序搬过来,少了一个处理
TCustomComboBox::ComboWndProc(Message, ComboWnd, ComboProc);
}Top
8 楼TryToday(超口术生命体)回复于 2004-04-02 22:53:17 得分 0
大师讲的不太理解,反正程序ok了,感谢!
这么大的bug borland都没发现,用户也没发现,莫非我是继承DBComboBox第一人.Top




