我在dll里建了一個FORM
在Form里用了 Create事件加了
Application.OnMessage := WMDropMessage;
procedure Tfm_TS.WMDropMessage(var Msg: TMsg; var Handled: Boolean);
var
……
begin
……
end;
當退出時報錯,怎么解決啊????????????
uj5u.com熱心網友回復:
報什么錯??uj5u.com熱心網友回復:
dll的 Application 設定為呼叫者的 Applicationuj5u.com熱心網友回復:
你把WMDropMessage貼上來。。uj5u.com熱心網友回復:
關注,留腳印,每天拿十分uj5u.com熱心網友回復:
這個Dll是動態加載的,function openDllModal(DLLName: string; ProcName: string; vhand: THandle): THandle; stdcall;
type
TDllModalFun = function(hand: THandle): THandle; stdcall;
var
DLLHandle: THandle; //dll句柄
pDll: Pointer;
vHd:THandle;
begin
try
DLLHandle := LoadLibrary(PChar('Modal\' + DLLName));
if DLLHandle > 0 then
begin
pDll := GetProcAddress(DLLHandle, PChar(ProcName));
if pDll <> nil then
begin
try
//Result := TDllModalFun(pDll)(vhand);
vHd:=TDllModalFun(pDll)(vhand);
Result:=vHd;
except
on e: Exception do
begin
DisplayMessage('error', '執行' + ProcName + '函式出錯!' + #13 + e.Message);
Exit;
end;
end;
end else
begin
DisplayMessage('error', '加載dll函式出錯!');
Exit;
end;
end else
begin
DisplayMessage('error', '獲取dll句柄出錯!');
Exit;
end;
finally
//FreeLibrary(DLLHandle);
end;
end;
//FreeLibrary(DLLHandle);
這個屏了就不報錯了
這個是
procedure Tfm_TS.WMDropMessage(var Msg: TMsg; var Handled: Boolean);
var
WMD: TWMDropFiles;
vWinControl: TWinControl;
begin
case Msg.message of
WM_DROPFILES:
begin
vWinControl := FindControl(Msg.hwnd);
//ShowMessage(vWinControl.Name + '發送的訊息');
end;
end;
if Msg.message = WM_DROPFILES then
begin
WMD.Msg := Msg.message;
WMD.Drop := Msg.wParam;
WMD.Unused := Msg.lParam;
WMD.Result := 0;
WMDropFiles(WMD);
Handled := TRUE;
end;
end;
uj5u.com熱心網友回復:
我的Dll的 Application 已經是主程式的Application 了
uj5u.com熱心網友回復:
我報的是地址錯
---------------------------
Pro_dwhs
---------------------------
Access violation at address 032DB6D4. Read of address 032DB6D4.
---------------------------
確定
---------------------------
uj5u.com熱心網友回復:
好吧。。
uj5u.com熱心網友回復:
在dll里如果屏了 Application.OnMessage := WMDropMessage;
Dll就沒辦法處理拖動
因為我直接寫procedure WMDropFiles2(var message: TMessage); message WM_DROPFILES;
根本不會觸發
或者在主程式中屏了 FreeLibrary(DLLHandle);
都不會報錯 屏 Application.OnMessage := WMDropMessage;肯定是不能的
如果屏 FreeLibrary(DLLHandle);那么就沒辦法釋放了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/146332.html
標籤:VCL組件開發及應用
上一篇:DELPHI設定透明視窗的問題
