2017-12-13 2 views
-2

Ich versuche, eine Nachricht von meiner C++ - Konsolenanwendung an die Delphi X-Anwendung unter Windows 10 zu senden, und sie funktioniert aus irgendeinem Grund nicht. Unten ist mein C++ Code:Nachricht von C++ an Delphi X senden

int _tmain(int argc, _TCHAR* argv[]) 
{ 

    CString dataToSend = _T("MY DATA"); 
    COPYDATASTRUCT cds; 
    cds.dwData = 1; // can be anything 
    cds.cbData = sizeof(TCHAR) * (_tcslen(dataToSend) + 1); 
    cds.lpData = (void*)dataToSend.GetBuffer(cds.cbData); 

    HWND hwndFound;   // This is what is returned to the caller. 
    hwndFound = FindWindow(_T("TMyForm"), 0); 


    if (hwndFound) 
    { 
     printf("WINDOW IS FOUND %i... Sending a message...\n", hwndFound); 
     SendMessage(hwndFound, WM_COPYDATA, (WPARAM)hwndFound, (LPARAM)(LPVOID)&cds); 
    } 
    else 
    { 
     printf("WINDOW IS NOT FOUND!\n"); 
    } 



    char* end = ""; 
    printf("Press enter to continue..."); 
    scanf(end); 

    return 0; 
} 

Das ist mein Delphi-Code:

private 
    procedure WMCopyData(var Msg : TWMCopyData); message WM_COPYDATA; 
.... 


procedure TMyForm.WMCopyData(var Msg: TWMCopyData); 
var 
    s : AnsiString; 
begin 
    s := PAnsiChar(Msg.CopyDataStruct.lpData) ; 
    ShowMessage(s); 
end; 

.... 

procedure TMyForm.MyButtonClick(Sender: TObject); 
begin 
    // Checking my handle 
    ShowMessage(IntToStr(Handle)); 
end 

C++ app sagt es mit einem Griff gefunden:

FENSTER 3.609.366 gefunden ... eine Nachricht gesendet. .. Drücken Sie die Eingabetaste, um fortzufahren ...

Derselbe Griff wird angezeigt, wenn ich MyButton (3609366) drücke, aber das Meldungsfeld wird nicht angezeigt. Aus irgendeinem Grund empfängt Delphi App die Nachricht nicht.

Haben Sie eine Idee warum?

S.S .: Sie laufen unter demselben Benutzerkonto.

+1

Auf Seitenhinweisen erwartet der Delphi-Code 'AnsiChar'-Daten, daher sollten Sie' TCHAR' nicht im C++ - Code verwenden. Außerdem verwendet die VCL 'WM_COPYDATA' intern, also müssen Sie' dwData' vor der Interpretation von 'lpData' betrachten (Sie sollten' RegisterWindowMessage() 'für den 'dwData'-Wert verwenden). Und die 'WPARAM' von' WM_COPYDATA' muss die 'HWND' des Senders sein, nicht der Empfänger. –

+0

Nützliche Informationen - Danke! –

Antwort

0

Sie senden eine WM_USER + 1-Nachricht an Delphi, hören aber nicht auf diese Nachricht in Delphi.

+0

Diese Antwort gilt nicht mehr, nachdem die Frage bearbeitet wurde. –

+0

Das ist mir gerade aufgefallen. Vielen Dank! –

Verwandte Themen