在 Debug模式下编译代码时,我得到error C2440 "cannot convert from 'const char *' to 'LPCTSTR'"
当我在 Release模式下编译代码时,它编译时没有错误,我什至没有得到警告。
错误发生在线:
LPCTSTR lpFileName = strFilenameIni.c_str();
我使用LPCTSTR,因为我使用
GetPrivateProfileString
从ini文件中读取值,并且我需要将文件位置转换为LPCTSTR,以便GetPrivateProfileString接受它。我在编译器设置中搜索了可能导致偏差但找不到的东西。
我只是无法在 Debug模式下进行编译。
我正在使用Visual Studio 2005。
任何帮助表示赞赏。
有问题的代码:
std::string strFilenameIni = ""; //filename of ini file
strFilenameIni = (char*)(void*)System::Runtime::InteropServices::Marshal::StringToHGlobalAnsi(textBox_ini_load->Text);
//init ini-parser strings
LPCTSTR lpFileName = strFilenameIni.c_str(); //<- this throws error in debug
LPCTSTR lpSection = "CHECKSUM";
LPCTSTR lpKey = "CRC";
TCHAR TCHAR_inBuf[11]; //buffer for CRC-number
GetPrivateProfileString(lpSection,lpKey,"",TCHAR_inBuf,11,lpFileName); //read CRC
unsigned long ulCRC_IN = strtoul(TCHAR_inBuf,NULL,16); //convert to unsigned long
最佳答案
更改字符集为注释后,似乎仍然存在一些问题。
无论如何,您应该始终使用以下API设置之一;不要混在一起。
对于单字节字符:
char, LPCSTR, std::string, GetPrivateProfileStringA, strtoul, "literal"
对于宽(2字节)字符:
wchar_t, LPCWSTR, std::wstring, GetPrivateProfileStringW, wcstoul, L"literal"
对于取决于
_UNICODE
的情况:TCHAR, LPCTSTR, **, GetPrivateProfileString, _tcstoul, _T("literal")
**没有标准的预定义方法,您最好像这样使用:
typedef std::basic_string<TCHAR> tstring;
关于c++ - 在调试中无法从 'const char *'转换为 'LPCTSTR',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24605615/