Я пишу приложение на C ++, которое отправит сообщение приложению, написанному на Delphi.
Это приложение для моего приемника:
При нажатии кнопки Edit1.Text
будет отправлено через ShellExecute()
в качестве параметра командной строки приложению-отправителю (C ++).
Приложение отправителя отправит параметр в виде сообщения WM_COPYDATA
приложению получателя, которое отобразит его в текстовом поле Edit2
.
Это код приложения Delphi (Delphi 10.3 Rio):
procedure TForm1.Button1Click(Sender: TObject);
begin
ShellExecute(0, 'open', 'deneme.exe', PWideChar(Edit1.Text), nil, SW_HIDE);
end;
procedure TForm1.MesajAl(var Mesaj: TMessage);
var
Veri: PCopyDataStruct;
begin
Veri := Pointer(Mesaj.LParam);
Edit2.Text := PChar(Veri^.lpData);
end;
Это код моего приложения C ++ (Code :: Blocks IDE):
#include <iostream>
#include <windows.h>
#include <tchar.h>
using namespace std;
int main(int argc, char* argv[])
{
if (argc < 2)
{
return 0;
}
else
{
HWND hwnd = FindWindow(NULL, "Form1");
string alinanMesaj;
LPCTSTR gonderilecekMesaj = alinanMesaj.c_str();
COPYDATASTRUCT cds;
cds.cbData = sizeof(TCHAR)*(_tcslen(gonderilecekMesaj) + 1);
cds.dwData = 1;
cds.lpData = (PVOID)gonderilecekMesaj;
SendMessage(hwnd, WM_COPYDATA, (WPARAM)hwnd, (LPARAM)(LPVOID)&cds);
return 0;
}
}
Проблема в том, что текстовое поле Edit2
ничего не показывает.
Кстати, я провел исследование на этом сайте о WM_COPYDATA
. Но, несмотря на то, что в этой ситуации я не смог решить свою проблему самостоятельно.
Итак, что мне делать, чтобы исправить мою проблему?