【发布时间】:2013-04-03 11:26:45
【问题描述】:
我想将 TCHAR 数组转换为 wstring。
TCHAR szFileName[MAX_PATH+1];
#ifdef _DEBUG
std::string str="m:\\compiled\\data.dat";
TCHAR *param=new TCHAR[str.size()+1];
szFileName[str.size()]=0;
std::copy(str.begin(),str.end(),szFileName);
#else
//Retrieve the path to the data.dat in the same dir as our data.dll is located
GetModuleFileName(_Module.m_hInst, szFileName, MAX_PATH+1);
StrCpy(PathFindFileName(szFileName), _T("data.dat"));
#endif
wstring sPath(T2W(szFileName));
我需要将szFileName 传递给期望的函数
const WCHAR *
为了完整起见,我声明了我需要将szFileName 传递给:
HRESULT CEngObj::MapFile( const WCHAR * pszTokenVal, // Value that contains file path
HANDLE * phMapping, // Pointer to file mapping handle
void ** ppvData ) // Pointer to the data
但是,T2W 对我不起作用。编译器说that "_lpa" is not defined,我不知道从哪里开始。我尝试了其他我在网上找到的转换方法,但它们也不起作用。
【问题讨论】:
-
使用
TCHAR的基本规则是,始终使用 tchar 函数和类似的例程。std::copy并不是在TCHAR和std::string之间转换的正确方法。表达LPCTSTR szFileName = _T("m:\\compiled\\data.dat");的最简单方法之一您不需要那种复杂的复制代码。如果想要 unicode 变体LPCWSTR szFileName = L"m:\\compiled\\data.dat";