主程序调用DLL,嵌入到主程序的PANEL,运行是有时候出现USER32.DLL异常

主程序调用DLL,嵌入到主程序的PANEL,运行是有时候出现USER32.DLL错误
DLL 接口函数
function LoadDllForm(AHandle, AParent: HWnd): TForm; stdcall;
begin
  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;
end;

主程序采用静态调用
DLL接口函数申明
function LoadDllForm(AHandle, AParent: HWnd): TForm; stdcall; external 'TestDLL.dll'

主程序调用
frmDllForm:= LoadDllForm(Application.Handle, Panel1.Handle);

主程序运行的时候,不是每次都报错,access violaction at address xxxxx in module 'user32.dll'. Read of address xxxxx
 
错误出现的时候,DLL窗口还没有显示,错误确认后,发现DLL窗口能显示,但是并没有按要求扩展到整个Panel中,而且程序一直地址错误,主程序退出也报错。

网上查了下,USER32.DLL是负责用户窗口创建之类的,应该是DLL窗口嵌入显示有问题。

顺便说下,DLL程序肯定没问题,我不嵌入的Panel中,直接DLL窗口SHOWMODAL作为独立窗口,程序完好。请大家帮忙看下,这种情况很难调试。

------解决思路----------------------
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楼,然后在所有的工程引用的第一个单元带上ShareMem
------解决思路----------------------
你的问题不好回答,因为exe+dll的开发模式需要一定的能力。也与你的产品开发总体结构有关。这方面我可以提供一些代码供你参考。QQ:188136923.
------解决思路----------------------
我曾经试过窗口Form DLL,放在PANEL上,出现类似错误。指针方面的错误,这也许是Delphl的异常。
最后,只好放在Form上。.