在 UNICODE 应用程序的 catch 块内将 char * 转换为 CString

Posted

技术标签:

【中文标题】在 UNICODE 应用程序的 catch 块内将 char * 转换为 CString【英文标题】:Converting char * to CString inside a catch block in a UNICODE application 【发布时间】:2015-03-09 12:15:07 【问题描述】:

我在 MFC 应用程序中有这段代码:

catch(cv::Exception &ex)
    
        USES_CONVERSION;
        MessageBox(A2T(ex.what()), _TEXT("Error"), MB_ICONERROR);

    

但我收到此错误:

error C3204: '_alloca' cannot be called from within a catch block   

如何解决此错误?

将 const char * 转换为 CString 的原始解决方案来自我在互联网上的搜索,但我在 catch 块中找不到任何信息。

【问题讨论】:

【参考方案1】:

删除USES_CONVERSION

更改:MessageBox(A2T(ex.what()), _TEXT("Error"), MB_ICONERROR);

收件人:MessageBoxA(ex.what(), "Error", MB_ICONERROR);

注意MessageBoxA 末尾的额外“A”。

【讨论】:

我是这样使用的:MessageBoxA(NULL, ex.what(), "Error", MB_ICONERROR);【参考方案2】:

尝试在 catch 块中使用 _resetstkoflw。

【讨论】:

请编辑您的答案,并解释这是如何解决问题的。

以上是关于在 UNICODE 应用程序的 catch 块内将 char * 转换为 CString的主要内容,如果未能解决你的问题,请参考以下文章

catch 块内的 PHPUnit 测试代码

在Kotlin catch块内设置val

JAVA中try catch捕获异常的问题

php try catch 捕获哪些错误

使用try和catch捕获异常

java中代码发生异常后 程序会怎么执行?