我有一个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