我必须制作访问.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);
结果包含要在编辑控件中显示的消息,其类型为char *。每当我运行程序时,结果都显示在空白框□或中文中。我尝试使用A2T和CA2T转换结果,但这些都没有效果。
答案 0 :(得分:0)
可以使用Microsoft的_wfopen()
函数(或TCHAR
等效函数_tfopen()
)修复第一个错误,以匹配TCHAR
GetPathName()
的性质1}}而不是fopen()
。这样,您根本不需要将输入字符串转换为char*
:
fp = _wfopen(dlg.GetPathName(), L"r");
fp = _tfopen(dlg.GetPathName(), _T("r"));
在第二个错误中,如果Result
为char*
(或可隐式转换为char*
的内容)且LPCTSTR
映射到const wchar_t*
(因为{ {1}}已定义)然后您可以使用UNICODE
就好了:
CA2CT
但是,由于m_Result.SetWindowTextW(CA2CT(Result));
只需要SetWindowTextW()
而不是wchar_t*
,所以请改用TCHAR*
:
CA2CW
或者,如果可能,您应该首先更改m_Result.SetWindowTextW(CA2CW(Result));
以使用Result
而不是wchar_t
,然后您就不再需要转换:
char