这一句貌似有问题:“Application.Handle := AHandle;”
建议应用程序和DLL同时“Build with runtime library”,共同依赖于rtl,这样Application的实例就是同一个,”Application.Handle“的赋值自然不需要,也不会有问题了。

解决方案 »

  1.   

    function LoadDllForm(AHandle, AParent: HWnd): TForm; stdcall;
    var
       oldApplicationHandle : HWnd;
    begin
      oldApplicationHandle  := Application.Handle;//新增加的
      Application.Handle := AHandle;
      Application.CreateForm(TfrmTest, frmTest);
      try
        frmTest.ParentWindow := AParent;
        frmTest.BorderStyle := bsNone;
        frmTest.WindowState := wsMaximized;    frmTest.Show;    Result := frmTest;
      except
        Result := nil;
        frmTest.Free;
      end;
      Application.Handle := oldApplicationHandle;//新增代码 
    end;你试试
      

  2.   

    建议用带包会比较好,不然总是会有各种莫名问题,如果非要如此,参考2楼,然后在所有的工程引用的第一个单元带上ShareMem
      

  3.   

    function LoadDllForm(AHandle, AParent: HWnd): TForm; stdcall;
     var
        oldApplicationHandle : HWnd;
     begin
       oldApplicationHandle  := Application.Handle;//新增加的
       Application.Handle := AHandle;
       Application.CreateForm(TfrmTest, frmTest);
       try
         frmTest.ParentWindow := AParent;
         frmTest.BorderStyle := bsNone;
         frmTest.WindowState := wsMaximized;
     
        frmTest.Show;
     
        Result := frmTest;
       except
         Result := nil;
         frmTest.Free;
       end;
       Application.Handle := oldApplicationHandle;//新增代码 
     end;
     
    鉴定完毕,方案可行,好诡异的解决方法,能解释下不?
      

  4.   

    delphi 的dll带有Application对象,如果要显示在dll中创建窗口,则必须把dll的Application替换为应用程序的,末了再换回来。
      

  5.   

    你的问题不好回答,因为exe+dll的开发模式需要一定的能力。也与你的产品开发总体结构有关。这方面我可以提供一些代码供你参考。QQ:188136923.
      

  6.   

    引用DLL工程跟DLL工程都要加ShareMem
      

  7.   

    我曾经试过窗口Form DLL,放在PANEL上,出现类似错误。指针方面的错误,这也许是Delphl的异常。
    最后,只好放在Form上。.