如何在c ++(MFC)中将char *转换为LPCTSTR

时间:2017-05-01 09:09:37

标签: c++ unicode mfc type-conversion

我必须制作访问.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转换结果,但这些都没有效果。

1 个答案:

答案 0 :(得分:0)

可以使用Microsoft的_wfopen()函数(或TCHAR等效函数_tfopen())修复第一个错误,以匹配TCHAR GetPathName()的性质1}}而不是fopen()。这样,您根本不需要将输入字符串转换为char*

fp = _wfopen(dlg.GetPathName(), L"r");

fp = _tfopen(dlg.GetPathName(), _T("r"));

在第二个错误中,如果Resultchar*(或可隐式转换为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