PostMessage — 如何发送 int 数组?

ViH*_*ViH 1 c++ mfc postmessage visual-c++

如何发送int数组:

int *pars = new int[4];
pars[0] = 87675;
//...
pars[3] = 1024;
PostMessage(?);
Run Code Online (Sandbox Code Playgroud)

然后正确接收并清除内存:

LONG OnMessage(WPARAM wParam, LPARAM lParam) {
//?
}
Run Code Online (Sandbox Code Playgroud)

一切都在一个过程中。

rus*_*tyx 6

在单个进程中,您只需通过LPARAM.

    int *pars = new int[4];
    pars[0] = 87675;
    //...
    pars[3] = 1024;
    PostMessage(hWnd, WM_MY_CUSTOM_MSG, 0, (LPARAM)pars);
Run Code Online (Sandbox Code Playgroud)

然后从 中取出lParam,使用然后释放:

LONG OnMessage(WPARAM wParam, LPARAM lParam) {
    int *pars = (int*)lParam;

    // use it ...

    delete[] pars;
}
Run Code Online (Sandbox Code Playgroud)

不理想,但这是 WinAPI ...

对于更类似于 RAII 的方法,请将指针包裹在unique_ptr

LONG OnMessage(WPARAM wParam, LPARAM lParam) {
    std::unique_ptr<int[]> pars((int*)lParam);

    // use it normally ...

    // it's freed automatically
}
Run Code Online (Sandbox Code Playgroud)