wr960204你好,我看了你的文章学到很多东西谢谢,但是现在有个问题,就是先生在上面贴的
代码,我运行了一遍,但是在:
function TPackage.RegClassInPackage: Boolean;
//该函数只能在工程文件需要VCL,RTL两个包文件时才能用
//因为我们需要把全局的函数指针Classes.RegisterComponentsProc指向我们自己
//函数(该函数为IDE准备,IDE会为它设定函数而我们的程序也要模仿IDE为它设定函数)。
//如果不是带VCL和RTL两个包,那么我们设置的只是我们本身Classes单元的函数指针
//而不是包括Package的全局的。
//
//而有趣的是如果我们的工程不带包运行,那么我们基本上可以同时用它来查看最近几个版本的
//Borland编译器所产生的包文件而不会产生异常,但是控件不能够注册了。
var
I : Integer;
oldProc : Pointer;
RegProc : procedure();
RegProcName, UnitName: string;
begin
oldProc := @Classes.RegisterComponentsProc;
Classes.RegisterComponentsProc := @RegComponentsProc;
FPageInfos.Clear;
try
try
for i := 0 to FContainsUnit.Count - 1 do
begin
RegProc := nil;
UnitName := FContainsUnit;
RegProcName := '@' + UpCase(UnitName[1])
+ LowerCase(Copy(UnitName, 2, Length(UnitName))) + '@Register$qqrv';
//后面这个字符串@Register$qqrv是Borland定死了的,Delphi5,6,7,BCB5,6都是这样子的
//Delphi3是Name + '.Register@51F89FF7'。而Delphi4手里没有,不曾试验过
RegProc := GetProcAddress(FPackHandle,
PChar(RegProcName));
if Assigned(RegProc) then
begin
CurrentPackage := Self;
RegProc;
end;
end;
except
UnRegisterModuleClasses(FPackHandle);
ClearPageInfo;
Result := True;
Exit;
end;
finally
Classes.RegisterComponentsProc := oldProc;
end;
end;
没有进入if Assigned(RegProc) then
begin
CurrentPackage := Self;
RegProc;
end;
end;
因此为创建不了窗体。请问是不是我有些什么没有做好,比如在生成BPL的时候要注意什么