だから私はちょっとこれに従った:
https://msdn.microsoft.com/en-us/library/ms649009(v=vs.85).aspx
この:
WM_COPYDATA を使用してプロセス間でデータを送信する
openframeworks アプリケーションと unreal エンジンの間でデータを送信する場合 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 の update 関数に追加しました
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);
}
これを達成するためのヒントはありますか?おそらく本当に単純ですが、明確な情報が見つかりません。ありがとう!