gpt4 book ai didi

c++ - 2010 版 MFC 代码在 2013 年不再工作,有什么建议吗?

转载 作者:太空宇宙 更新时间:2023-11-04 16:11:12 25 4
gpt4 key购买 nike

我应该如何更改此 vs2010 代码以在 vs2013 中工作?

这是 MFC 应用程序的一部分。我有两个带有 CString 变量 m_Name 和 m_Age 的编辑控件。还有一个打印按钮,如果单击它,它会在消息框上显示这两个信息。

void CMyProgramDlg::OnBUTTON_PRINT()
{
UpdateData(TRUE);
char szText[100];
sprintf(szText, "Name: %s\n"\
"Age: %d",
m_Name, m_Age);
MessageBox(szText, m_Name+"Message", NULL);

问题是 MessageBox() 不再接受 char。所以我转换为 CString。但新的问题是打印的消息只显示姓名和年龄的首字母。因此,如果我在名字中输入“Jack”,在年龄中输入“40”,它只会显示“J”和“4”。

最佳答案

新项目显然是在 Unicode 模式下编译的,所以 TCHARwchar_t,所有 WinAPI 函数都接受 wchar_t 而不是 char (或指向它们的指针)。

更准确地说:在旧项目中扩展为MessageBoxA的宏MessageBox现在扩展为MessageBoxW,其中MessageBoxA 接受指向 char 的指针,MessageBoxW 需要指向 wchar_t 的指针。所有接受字符串的 WinAPI“函数”都存在这种机制。

进入项目的项目属性并在配置属性 -> C/C++ -> 常规下将“字符集”设置为不设置或多字节而不是 Unicode,然后它应该像以前一样运行。或者,使用 MessageBoxA 而不是 MessageBox 来显式调用 ANSI 版本,或者更改代码以便它在任何地方都使用 TCHAR

参见 https://msdn.microsoft.com/en-us/library/c426s321.aspx了解详情。

关于c++ - 2010 版 MFC 代码在 2013 年不再工作,有什么建议吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28515730/

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