【发布时间】:2017-05-01 09:09:36
【问题描述】:
我必须制作访问 .txt 文件的 MFC 应用程序。 以下代码是给定模板文件的一部分:
fopen(dlg.GetPathName());
但是,当我尝试运行给定的模板文件时,我收到错误,表明 char* 无法转换为 LPCTSTR。 我在网上做了一些研究,修改后程序运行良好:
USES_CONVERSION;
const char* cstr;
cstr = T2A((LPCTSTR)dlg.GetPathName());
~
fp = fopen(cstr, "r");
我之所以提到这一点,是因为我的编译器(VS 2017 社区)可能默认使用 unicode。我认为这是解决上述问题的关键:
我在窗口编辑控件上打印结果时遇到问题。
m_Result.SetWindowTextW((LPCTSTR)Result);
Result 包含要在编辑控件中显示的消息,其类型为 char*。每当我运行程序时,它都会显示在空白框□或中文中。我尝试使用 A2T 和 CA2T 转换结果,但这些都不起作用。
【问题讨论】:
-
解决您的问题的方法是阅读The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!)。向对象抛出随机宏和 C 样式强制转换不是解决方案的一部分。
-
(LPCTSTR)dlg.GetPathName()和这个((LPCTSTR)Result)-- 这些都是错误的。您不会通过强制转换从一种字符类型转换为另一种字符类型。你在这里所做的只是阻止编译器告诉你你的错误。删除强制转换,或者 1) 通过调用适当的函数正确地将从一种类型转换为另一种类型,或者 2) 从一开始就使用 正确 字符串类型。无论如何,你要么做 1) 要么 2) 没有任何 C 风格的演员表。
标签: c++ unicode mfc type-conversion