gpt4 book ai didi

c++ - 如何通过 PostMessage 发送字符串?

转载 作者:IT老高 更新时间:2023-10-28 22:21:19 27 4
gpt4 key购买 nike

在我的应用程序中,我想从不同的线程向对话框发送消息。我想将 std::exception 派生类引用传递给对话框。

类似这样的:

try {
//do stuff
}
catch (MyException& the_exception) {
PostMessage(MyhWnd, CWM_SOME_ERROR, 0, 0); //send the_exception or the_exception.error_string() here
}

我想在我的对话框中接收消息并显示 the_exception.error_string()

中的错误
LPARAM CMyDlg::SomeError(WPARAM, LPARAM)
{
show_error( ?????
return 0;
}

我猜,使用 PostMessage 传递 std::string the_exception.error_string() 也可以。

最佳答案

您不能在 PostMessage 中传递字符串的地址,因为该字符串可能在堆栈上是线程本地的。等到其他线程捡起它时,它可能已经被销毁了。

相反,您应该通过 new 创建一个新的字符串或异常对象并将其地址传递给另一个线程(通过 PostMessage 中的 WPARAM 或 LPARAM 参数。)然后另一个线程拥有该对象并负责销毁它。

下面是一些示例代码,展示了如何做到这一点:

try
{
// do stuff
}
catch (const MyException& the_exception)
{
PostMessage(myhWnd, CWM_SOME_ERROR, 0, new std::string(the_exception.error_string));
}


LPARAM CMyDlg::SomeError(WPARAM, LPARAM lParam)
{
// Wrap in a unique_ptr so it is automatically destroyed.
std::unique_ptr<std::string> msg = reinterpret_cast<std::string*>(lParam);

// Do stuff with message

return 0;
}

关于c++ - 如何通过 PostMessage 发送字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1325270/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com