0

だから私はちょっとこれに従った:

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);
}

これを達成するためのヒントはありますか?おそらく本当に単純ですが、明確な情報が見つかりません。ありがとう!

4

0 に答える 0