Как определить lParam для COPYDATASTRUCT?

Так что я как бы следовал этому:

https://msdn.microsoft.com/en-us/library/ms649009(v=vs.85).aspx

и это:

Используйте WM_COPYDATA для отправки данных между процессами

Для отправки данных между приложением openframeworks и нереальным движком 4.
Теперь все, кажется, хорошо, за исключением того, что я не могу понять, почему я получаю ошибку, что lParam не определен. Возможно, это что-то простое, но я не могу найти, как это сделать.

Итак, в нереальном движке 4 у меня есть актер, который отправляет сообщение каждые 10 секунд (в целях тестирования):

void ACOMActor::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );

timer += DeltaTime;

if (timer > sendtime) {
timer = 0.f;
std::string string  = "a message";
const wchar_t* wstring = new wchar_t[string.length() +1];
std::copy(string.begin(), string.end(), wstring);
SendWMCOPYDATA(wstring);
}
}

void ACOMActor::SendWMCOPYDATA(const wchar_t* string)
{
HWND WINAPI GetActiveWindow(void);
LPCTSTR lpszString = string;
COPYDATASTRUCT cds;
cds.dwData = 1;
cds.cbData = sizeof(TCHAR) * (_tcslen(lpszString) + 1);
cds.lpData = &lpszString;

SendMessage(GetActiveWindow(), WM_COPYDATA, (WPARAM)GetActiveWindow(), (LPARAM)(LPVOID)&cds);

GEngine->AddOnScreenDebugMessage(-1, 5.F, FColor::Green, FString::Printf(TEXT("Sending a message")));
}

Некоторый код все еще немного груб, но я просто пытался заставить его работать в первую очередь.

Я также создал код для получения сообщения в openframeworks. Я не совсем уверен, как это сделать, поэтому я добавил это в функцию обновления моего ofApp.cpp

void ofApp::update() {
GM->update();

PCOPYDATASTRUCT pMyCDS;
void WINAPI MyDisplay(LPSTR, LPSTR, DWORD);

pMyCDS = (PCOPYDATASTRUCT)lParam;
if (pMyCDS->dwData == 1)
{
LPCTSTR lpszString = (LPCTSTR)(pMyCDS->lpData);
cout << "receiving a message" << endl;
}
}

Так что это не работает, потому что lParam не определено. Я тоже пытался что-то сделать с
LRESULT CALLBACK WndProc (HWND hwnd, сообщение UINT, WPARAM wParam, LPARAM lParam)

Но я не знаком с этим и не уверен, как его использовать. Моя ошибка исчезла, но сообщение не было получено … Я использовал это так, вероятно, неправильно:

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
PCOPYDATASTRUCT pMyCDS;
void WINAPI MyDisplay(LPSTR, LPSTR, DWORD);
pMyCDS = (PCOPYDATASTRUCT)lParam;
if (pMyCDS->dwData == 1)
{
LPCTSTR lpszString = (LPCTSTR)(pMyCDS->lpData);
cout << "receiving a message" << endl;
}
return DefWindowProc(hwnd, message, wParam, lParam);
}

Любые советы, как этого добиться? Вероятно, это действительно просто, но я не могу найти никакой четкой информации. Спасибо!

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]