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

how to convert char* to LPCTSTR in c++(MFC)

本文关键字:char 转换 LPCTSTR 中将 C++ MFC      更新时间:2023-10-16

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

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

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

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

在第二个错误中,如果Resultchar*(或隐式转换为char*的东西)并且LPCTSTR映射到const wchar_t*(因为定义了UNICODE),那么您可以使用CA2CT就可以了:

m_Result.SetWindowTextW(CA2CT(Result));

但是,由于SetWindowTextW()只期望wchar_t*而从不TCHAR*,因此请改用CA2CW

m_Result.SetWindowTextW(CA2CW(Result));

或者,如果可能的话,您应该首先将Result更改为使用wchar_t而不是char,这样您就不再需要转换了:

m_Result.SetWindowTextW(Result);