所以我有点遵循这个:
https://msdn.microsoft.com/en-us/library/ms649009(v=vs.85).aspx
和这个:
用于在 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 message, 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);
}
任何提示如何实现这一目标?这可能真的很简单,但我找不到任何明确的信息。谢谢!