У меня есть 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, похоже, не получает сообщение. Вы случайно не знаете почему?
Если это плохой метод, и у вас есть другое решение, пожалуйста, дайте мне знать.