如何为COPYDATASTRUCT定义lParam?

时间:2016-03-01 12:14:05

标签: c++ wm-copydata

所以我有点跟着这个:

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

和此:

Use WM_COPYDATA to send data between processes

用于在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 个答案:

没有答案