现场给100分,我在主窗体调用一个DLL中的窗体,碰到一个难题.

HelpMeNow 2011-07-07 06:35:44
我在主程序中,加载一个DLL,DLL的每个窗体都事先注册过窗体类.代码如下
加载代码如下:
initialization

RegisterClassE()

procedure TManagerForm.RegisterClassE(AClass: TPersistentClass);
var
Index:Integer;
begin
Index:=FindClassE(AClass);
if Index<0 then
begin
FClassList.Add(AClass);
try
RegisterClass(AClass);
ShowMessage('成功注册');
except
ShowMessage('没成功');
end;
end;
end;

程序提示注册成功....

主程序调用代码如下

procedure TLoadModule.LoadAllModule;
var
i,aHandle:Integer;
AModule:PModuleRecord;
AModuleName:string;
Initproc:TInitModule;
begin
ReadIniFile;
for i:=0 to ModuleList.Count-1 do
begin
AModuleName:=ExtractFilePath(ParamStr(0))+'Dll\'+ModuleList.ValueFromIndex[i];
if not FindModule(AModuleName) then
begin
New(AModule);
AHandle := LoadLibrary(PChar(AModuleName));
AModule.ModuleName:=AModuleName;
if AHandle=0 then
begin
ShowMessage('装载DLL文件:'+AModuleName+'出错!');
Continue;
end;
AModule.Handle:=AHandle;
@Initproc := GetProcAddress(AHandle, PChar(InitProcedure));
if (@Initproc<>NIL) then
Initproc;
LoadList.Add(AModule);
end;
end;
end;


执行时,我在主程序却提示找不到这个我要注册的窗体...不知道为什么.
...全文
114 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
哈哈的哈 2011-07-12
  • 打赏
  • 举报
回复
BPL 的 可以用FINDCLASS
DLL 的不行 因为 DLL的加载方式是跟BPL不一样的··
jayqiang 2011-07-11
  • 打赏
  • 举报
回复
窗体是在DLL里注册的你就在DLL里FindClass创建窗体,把创建好的窗体再返回给主程序。这个办法应该可以吧!
yunzm_wang 2011-07-08
  • 打赏
  • 举报
回复
把Exe的application和screen传递给dll试试看
iamduo 2011-07-07
  • 打赏
  • 举报
回复
看一下 RegisterClass 的源代码。
有一个 什么什么 Group 管理的(我们可以直接理解成 TList)
exe 和 dll 的这个实例是不同的。
所以 Find 不到。
dinoalex 2011-07-07
  • 打赏
  • 举报
回复
加 RegisterClass(TXXX); 试试
HelpMeNow 2011-07-07
  • 打赏
  • 举报
回复
提示 Class '窗体类名' not found
HelpMeNow 2011-07-07
  • 打赏
  • 举报
回复
FindClass('类名');
提示没有这个类
也就是我在主窗体要获得这个类名字,却没有

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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