próbuję wysłać wiadomość między 2 oddzielnymi projektami, ale moim problemem jest to, że próbuję uruchomić odbiornik wewnątrz obiektu TThread, ale WndProc nie będzie działał z wnętrza obiektu, musi być funkcją, czy mimo to tworzy się okno wewnątrz TThread, które może przetwarzać wiadomości wewnątrz wątku?Tworzenie okna wewnątrz TThread
tutaj jest to, co mam na myśli
function TDataThread.WindowProc(hwnd: HWND; uMsg: UINT; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
Result := 0;
case uMsg of
WM_DATA_AVA: MessageBox(0, 'Data Avaibale', 'Test', 0);
else Result := DefWindowProc(hwnd, uMsg, wParam, lParam);
end;
end;
Procedure TDataThread.Create(const Title:String);
begin
HAppInstance := HInstance;
with WndClass do
begin
Style := 0;
lpfnWndProc := @WindowProc; //The Error Lies here (Variable Required)
cbClsExtra := 0;
cbWndExtra := 0;
hInstance := HAppInstance;
hIcon := 0;
hCursor := LoadCursor(0, IDC_ARROW);
hbrBackground := COLOR_WINDOW;
lpszMenuName := nil;
lpszClassName := 'TDataForm';
end;
Windows.RegisterClass(WndClass);
MainForm := CreateWindow('TDataForm', PAnsiChar(Title), WS_DLGFRAME , XPos, YPos, 698, 517, 0, 0, hInstance, nil);
end;
muszę mieć formę więc mogę dostać jego uchwyt z innej aplikacji za pomocą FindWindow i FindWindowEx razie potrzeby
jako sugestię, niech główny wątek pojawia się komunikat i sygnalizować swoją pracę wątek, gdy są dostępne nowe dane do przetworzenia. – jachguate
Wszystkie wątki w systemie Windows są równe, nie ma w nich nic "głównego" ani "tła". Różnią się one tym, czy mają pętlę komunikatów, czy nie, i jest jedna, która została stworzona jako pierwsza w procesie, ale chodzi o to w miarę różnic. Interakcja z COM może wymagać, aby wątek posiadał pętlę komunikatów, praca z oknami w wątku wymaga, aby miał pętlę komunikatów.Pętla komunikatów jest również dobrym sposobem komunikowania się z wątkiem. Poza tym, że VCL jest źle dopasowany, nie ma nic złego w wielu pętlach wiadomości w procesie. – mghie
, więc nie ma sposobu, aby mój wątek komunikował się z innymi procesami? , ponieważ każdy proces musi odesłać odpowiedź do wątku, aby pokazać, że jest gotowy do mapowania pliku dla danych! – killercode