BCB2006 关于继承TOpenDialog的问题(100分)

A

artx

Unregistered / Unconfirmed
GUEST, unregistred user!
我在bcb2006 中写一个新的OpenDialog,从vcl TOpenDialog继承,系统生成的代码如下:
//**************************************************************************
OpenDialog1.hpp代码:
#ifndef OpenDialog1H
#define OpenDialog1H
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Classes.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class PACKAGE TMyOpenDialog : public TOpenDialog
{
private:
protected:
public:
__fastcall TMyOpenDialog(TComponent* Owner);
__published:
};
//---------------------------------------------------------------------------
#endif
OpenDialog1.cpp代码:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include &quot;OpenDialog1.h&quot;
#pragma package(smart_init)
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components createddo
not have
// any pure virtual functions.
//
static inline void ValidCtrCheck(TMyOpenDialog *)
{
new TMyOpenDialog(NULL);
}
//---------------------------------------------------------------------------
__fastcall TMyOpenDialog::TMyOpenDialog(TComponent* Owner)
: TOpenDialog(Owner)
{
}
//---------------------------------------------------------------------------
namespace Opendialog1
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TMyOpenDialog)};
RegisterComponents(&quot;Samples&quot;, classes, 0);
}
}
//**************************************************************************
以上代码Build就出现Link Error:
[Linker Error] Error: Unresolved external '__fastcall Dialogs::TOpenDialog::Execute(void *)' referenced from C:/DOCUMENTS AND SETTINGS/ADMIN.ARTX/MYdo
CUMENTS/BORLAND STUDIO PROJECTS/DEBUG_BUILD/OPENDIALOG1.OBJ
我用同样的做法却在BCB6中顺利通过,请问BCB2006中怎么会出现这个问题,该怎么解决?
谢谢!
 
好像原有的vcl或lib沒有增加進去,
你嘗試 增加 #pragma link &quot;Dialogs.obj&quot;
這樣應該可以通過了
 
我加入了 #pragma link &quot;Dialogs.obj&quot;
,link时还是出一样的错误。。。
怎么只有BC2006才出这个问题?...求解中...
 
那麽我建議你加入Dialogs.pas到你的項目中
我未使用過派生的vcl,不知道具體如何解決
 
:( 问题还是一样。。。
虽然bcb vcl使用的是delphi的class,但就只有 Dialog 系列vcl会出这个问题,我从TButton这些类继承下来都不会出现link error,奇怪...
很感谢sdv的帮助,呵呵 :)
 
我今天有空
等一下去測試一下2006下的這個問題
我想應該不會太難解決
 
virtual bool __fastcall Execute(HWND ParentWnd)/* overload */
應該自行定義這個把?
你既然用的TOpenDialog
 
virtual bool __fastcall Execute(HWND ParentWnd)/* overload */
这个定义过,在Execute(HWND ParentWnd)方法中需要调用
TOpenDialog::Execute(ParentWnd);
但是问题又会出现,说obj中不能匹配TOpenDialog::Execute(void *)...
应该和原来的问题一样.
 
没有用过bcb,有delphi为什么还要用bcb?不如用Vc.net2005
 
因为要移植原来的bcb程序的到bcb2006...
现在只有用delphi来继承这个类,然后用于bcb...
 
好像是路径的问题,你修改一下BDS的BCB的路径设置试一试,编译和链接的都要设置,以便BDS能找到。
 
不是路径问题,我都增加了的
 
顶部