Odbiór WM_COPYDATA

0

Witam. Mój problem wygląda następująca. Chciałbym z programu napisanym w Delphi przesłeć pewne informacje do aplikacji głównej napisanej w C. Zdecydowaę sie na metode WM_COPYDATA, gdyż wydawała mi się najprostsza. Pojawia się jednak problem: w jaki sposób aplikacja główna ma odczytać wiadomosc wysłaną przez SendMessage ?

Jezyk: C
OS: Windows

0

Odswieżam.

Jest ktoś w stanie mi pomóc? Bo bardzo zalezy mi na rozwiązaniu problemu.

0

Bo bardzo zalezy mi na rozwiązaniu problemu.

Poza ogólnikami nic nie podałeś. Konkrety.

0

A nad czym tu myslec , czy te informacje są ukryte w Win Help SDK lub Win32 Reference , MSDN

Tu->msdn2.microsoft.com

The WM_COPYDATA message is sent when an application passes data to another application. 

WM_COPYDATA  
wParam = (WPARAM) (HWND) hwnd;            // handle of sending window 
lParam = (LPARAM) (PCOPYDATASTRUCT) pcds; // pointer to structure with data 
 

Parameters

hwnd

Identifies the window passing the data. 

pcds

Points to a COPYDATASTRUCT structure that contains the data to be passed. 

Return Values

If the receiving application processes this message, it should return TRUE; otherwise, it should return FALSE. 

Remarks

An application must use the SendMessage function to send this message, not the 
The COPYDATASTRUCT structure contains data to be passed to another application by the WM_COPYDATA message. 

typedef struct tagCOPYDATASTRUCT {  // cds  
    DWORD dwData ; 
    DWORD cbData; 
    PVOID lpData; 
} COPYDATASTRUCT; 

Z aplikacji nadawczej wysyłasz :

SendMessage(hwnd_okno_odbierające,WM_COPYDATA,(WPARAM)hwnd_nadawca,(LPARAM)&cds);

&cds to adres struktury COPYDATASTRUCT .
do dwData wrzusasz dowolną wartośc .
do cbData rozmiar przesyłanych danych.
do lpData wskaźnik do danych które przesyłasz .

Po stronie aplikacji odbierającej , musisz obsłużyć odbierany komunikat WM_COPYDATA.

Gdy aplikacja go odbierze , w parametrze wParam będzie hwnd nadawcy ,
w lParam wskażnik do "wysłanej" struktury COPYDATASTRUCT zawierającej wysłane dane .

0

Przede wszystkim podaj fragment z główną pętlą programu w C. Jeśli jest to program konsolowy mogą być potrzebne generalne przeróbki. Najprościej jest przesłać dane przez tymczasowy plik na dysku. Najtrudniejsza w tym zadaniu jest jednak kwestia jak zakomunikować program, że dane czekają do odbioru. I to zależy w dużej mierze od tego jak jest zbudowany program w C.

0

Poradziłem sobie przy pomocy CreateFileMapping i CopyMemory. Problem lezał w uchwycie do okna aplikacji konsolowej, który nie był odnajdywany. Tak czy siak dziękuję wszystkim za pomoc.

0

Jako pomoc przy wysyłaniu i odbieraniu komunikatów polecam strony dla Delphi
http://delphi.about.com/od/windowsshellapi/a/receive-windows-messages-in-custom-delphi-class-nonwindowed-control.htm
a szczególnie po pobrania zbiór z przykładem
http://delphi.about.com/library/code/tmsgreceiver.zip
Odbiór polega na tym iż procedura TMsgReceiver.WndMethod(var Msg: TMessage);
po jej wywołaniu sama w sobie kraży w pętli i czeka az strona nadająca coś wyśle wywolaniem
SendMessage lub PostMessage

Nadawanie jest opisane dobrze na stronie następnej
http://delphi.about.com/od/windowsshellapi/a/receive-windows-messages-in-custom-delphi-class-nonwindowed-control.htm
Przy przesyłaniu większej ilosci danych polecam skorzystać z przykładu
copydata umieszczonym na
http://delphi.about.com/od/windowsshellapi/a/wm_copydata.htm
i sciagnac przykład Download wm_copydata source code example.
umieszczonym na końcu strony

1 użytkowników online, w tym zalogowanych: 0, gości: 1