用Dll封装的MDI子窗体,Build with runtime packages,其它一切正常,仅当在Dll中调用Application时程序异常,请各位帮着看看
Dll的入口如下:
procedure getchildform(parentapplication:TApplication)
var ptr:PLongInt;
begin
...
Application.Handle:=parentapplication.MainForm.Handle;
ptr:@Application.MainForm;
ptr^:=Logint(parentapplication.MainForm);
TFormClass(ClassName).Create(Application.MainForm);
end;

解决方案 »

  1.   

    Application.Handle:=parentapplication.MainForm.Handle;
    ptr:@Application.MainForm;
    ptr^:=Logint(parentapplication.MainForm);
    TFormClass(ClassName).Create(Application.MainForm);==========================
    不晓得你在做什么
      

  2.   

    function GetChildForm(hApp:THandle):LongInt;
    begin
      Application.Handle:=hApp;
      Application.CreateForm(TForm1, Form1);
      Result:=LongInt(Form1);
    end;
      

  3.   

    budded(All By Myself:
      ptr:=@(Application.MainForm);//先把dll的MainForm句柄保存起来,也无须释放,只不过是替换一下
      ptr^:=LongInt(mainForm);//用主调程序的mainForm替换DLL的MainForm。MainForm是特殊的WINDOW,它专门管理Application中的Forms资源.
    //为什么不直接Application.MainForm := mainForm,因为Application.MainForm是只读属性
      

  4.   

    具体的问题如下:
    在主窗口中
    FreeLibrary(moduleHandle);
    ...
    LoadLibrary(pchar(dllname));
    ..
    如果Load之前不Free原来的Dll,则Application可以在DLL中调用,但因为程序中的窗体类是动态加载(Registerclasses),并且使用了wwDBGrid等IP控件,所以在Load之前必需Free上一个Dll,否则报类己注册错误,如此便会在执行LoadLibrary时报地址错..
    请各位高手帮着看看啦..