我有一個DLL,其在它的入口點exectues一些代碼,即現在傳遞消息到DLL的入口點
procedure MainDLL(Reason: Integer);
begin
{ ... Code here ... }
end;
begin
DLLProc := @MainDLL;
end.
,我想從外部應用程序傳遞一些值到DLL的入口點。我曾嘗試創建DLL裏面隱藏的窗口,這樣的:
const
WM_JAJCO = WM_USER + 1024;
type
TWnd = class(TObject)
class procedure DLLWndProc(var Msg: TMessage);
end;
{ ... }
class procedure TWnd.DLLWndProc(var Msg: TMessage);
var
Tmp: DWORD;
begin
if (Msg.Msg = WM_JAJCO) then
begin
PNewHandle := Msg.LParam;
CreateThread(nil, 0, @Starter, nil, 0, Tmp);
Msg.Result := 0;
end else
Msg.Result := DefWindowProc(MyHnd, Msg.Msg, Msg.WParam, Msg.LParam);
end;
// in the entry point
MyHnd := AllocateHWND(TWnd.DLLWndProc);
然後,之後我在調用者的應用程序初始化DLL,我用:
SendMessage(FindWindow('TPUtilWindow', nil), WM_USER + 1024, 0, wi.WndHandle);
Application.ProcessMessages();
但DLL中創建的窗口似乎沒有收到消息。你碰巧知道爲什麼?
如果這是一個不好的方法,你有不同的解決方案,請讓我知道。
爲什麼不從DLL中導出一個函數,並通過'GetModuleHandle','GetProcAddress'和對獲得的指針的調用將參數傳遞給這個導出的函數? –
但是,我調用'LoadLibrary'後就會執行入口點,不是嗎?我不明白你的意思。 – Pateman