当我在调试模式下编译代码时,我得到error C2440 "cannot convert from 'const char *' to 'LPCTSTR'"
当我在发布模式下编译代码时,它编译没有错误,我甚至没有得到警告。
错误发生在行:
LPCTSTR lpFileName = strFilenameIni.c_str();
我使用LPCTSTR,因为我使用GetPrivateProfileString
从ini文件中读取值,我需要将文件位置转换为LPCTSTR,以便GetPrivateProfileString接受它。
我在编译器设置中搜索了可能导致偏差的内容,但找不到任何内容 我只是无法在调试模式下编译它 我正在使用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
答案 0 :(得分:1)
在将字符集更改为注释后,似乎仍然存在一些问题 无论如何,你应该一直使用以下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;