我正在尝试将TCHAR转换为字符串,如下所示:
std::string mypath;
TCHAR path[MAX_PATH];
GetModuleFileName( NULL, path, MAX_PATH );
我需要将mypath
设置为path
的{{1}}。我做了一个简单的循环并将path[index]
连接到mypath
,这样可行,但我不喜欢这种方式。
我是C ++的新手,但已经做了很多C#。我已经看到GetModuleFileName
传递“char”的例子,但它不喜欢它。它需要TCHAR
或LPWSTR
。
答案 0 :(得分:21)
TCHAR是一个定义为char或wchar的宏,具体取决于您定义的字符集。 2008之后的默认值是将字符设置为unicode。如果您更改字符集,此代码将起作用。
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR* bob ="hi";
string s = bob;
}
右键单击项目设置并查看以下内容
如果您想将TCHAR用作Unicode字符集,请使用wstring
答案 1 :(得分:8)
如果你想要chars中的路径,你应该调用GetModuleFilenameA
。该函数需要LPSTR
而不是LPTSTR
。
请注意,几乎所有采用或返回字符串的Win32函数都有两个版本,一个以A
(ANSI?)结尾,另一个以W
(宽)结尾。
答案 2 :(得分:8)
当我真的需要这样做时,我使用以下内容:
TCHAR infoBuf[32767]
GetWindowsDirectory(infoBuf, 32767);
//Let's convert to string...
wstring test(&infoBuf[0]); //convert to wstring
string test2(test.begin(), test.end()); //and convert to string.
希望有所帮助。
答案 3 :(得分:5)
您还可以使用_TCHAR*
或char*
功能将wcstombs
转换为wcstombs_s
http://msdn.microsoft.com/en-us/library/5d7tc9zw%28v=vs.80%29.aspx
答案 4 :(得分:1)
嗨,这是一个很晚的答案,但我有个主意。
{wstring test = User;
std::wcout << test << std::endl;
string test2(test.begin(), test.end());
std::cout << test2 << std::endl;}
在此示例中,用户名为TCHAR
。
现在,我可以将名称用作string
或wstring
。
这是将TCHAR
转换为string
的最简单方法。