我在主程序中,加载一个DLL,DLL的每个窗体都事先注册过窗体类.代码如下
加载代码如下:
initializationRegisterClassE()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;
执行时,我在主程序却提示找不到这个我要注册的窗体...不知道为什么.

解决方案 »

  1.   

    FindClass('类名');
    提示没有这个类
    也就是我在主窗体要获得这个类名字,却没有
      

  2.   

    提示  Class '窗体类名' not found
      

  3.   

    加  RegisterClass(TXXX);  试试
      

  4.   

    看一下 RegisterClass 的源代码。
    有一个 什么什么 Group 管理的(我们可以直接理解成 TList)
    exe 和 dll 的这个实例是不同的。
    所以 Find 不到。
      

  5.   

    把Exe的application和screen传递给dll试试看
      

  6.   

    窗体是在DLL里注册的你就在DLL里FindClass创建窗体,把创建好的窗体再返回给主程序。这个办法应该可以吧!
      

  7.   

    BPL 的 可以用FINDCLASS 
    DLL 的不行  因为 DLL的加载方式是跟BPL不一样的··