调用BPL的问题,GetClass失败 ( 积分: 50 )

  • 主题发起人 主题发起人 agai
  • 开始时间 开始时间
A

agai

Unregistered / Unconfirmed
GUEST, unregistred user!
var

hPackage : HModule = 0;
implementation

{$R *.dfm}

procedure TfrmMain.RzGroup2Items0Click(Sender: TObject);
var
TfrmPack : TPersistentClass;
Tfrm : TForm;
begin
if hPackage = 0 then
hPackage := LoadPackage( ExtractFilePath( Paramstr(0))+'Package1.bpl' );
if hPackage = 0 then
ShowMessage('LoadPackage failed')
else begin
ShowMessage('LoadPackage OK');//这里成功了
TfrmPack := GetClass('TForm1');
if TfrmPack <> nil then
begin
ShowMessage('Getclass OK');//失败,
Tfrm := TComponentClass(TfrmPack).Create(Application) as TForm;
Tfrm.WindowState := wsMaximized;
Tfrm.Parent := rzPanel1;
Tfrm.Show;
end else
ShowMessage('Getclass failed') //此处提示'Getclass failed'

我的那个PACKAGE里边就有一个TFORM1类,而且注册过了,注册代码是这样的
initialization
RegisterClass(TForm1);
finalization
UnRegisterClass(TForm1);
 
我也想知道。
我用静态调用就可以,用动态就不行,真搞不懂。
是不是包里面注册的地址和程序的不是同一个地址啊???
 
你的项目是否带包编译了vcl70.bpl和rtl70.bpl?
 
找到答案了。
http://www.bestlong.idv.tw/viewtopic.php?p=55
<即使使用动态Package,也必须设置调用的工程为Build with runtime Package中包含你的Package,否则GetClass会失败! >

而且指定的bpl的路径要正确
 
后退
顶部