Delphi XE2中调用DLL窗体传递Application句柄

传统调用DLL窗体,为了达到DLL窗体与主程序融为一体的效果,通常会把主程序的Application传递到DLL工程中,类似如下方法:

procedure SynAPP(App: THandle); stdcall;
begin
//传递Application
Application.Handle:= App;
end;

或者直接把Application作为参数传递的:

procedure DLLEntryPoint(Reason: DWORD);
begin
  case Reason of
    DLL_PROCESS_ATTACH:
    begin
      DLLApp:=Application;//DLL初始化记录原始Application
      dxUnitsLoader.Initialize;
    end;
    DLL_PROCESS_DETACH:
    begin
      Application:=DllApp;//DLL释放还原Application
      dxUnitsLoader.Finalize;
    end;
  end;
end;

方案一,无法达到最终需要的效果,方案二直接在调用时报错(XE2报错,D7不报错,尴尬=。=!)

后来经过研究,在XE2下找到了方法,可以完美融合主程序和DLL窗口,在任务栏中只有一个窗口,同时支持DLL窗口的最大、最小化等。放代码:

//这是DLL中调用方法的代码:
function ShowWaitMsg(ParentFormHandle: THandle): Integer; stdcall;
var
  aForm:  TFormDLL;
begin
  Application.Handle := ParentFormHandle;  //将调用主窗口的句柄赋值为Application.Handle即可
  aForm := TFormDLL.Create(Application);
  aForm.ShowModal;
  FreeAndNil(aForm);
end;

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值