c – 在std :: string上使用_T

weixin_38058748 2019-09-12 12:27:18
我正在尝试使用这行代码 startingfolder = _T("C:\\VSS\\" + caseref); 但据我了解,我不允许在变量上使用_T.基本上我正在尝试将SHBrowseForFolder的起始文件夹设置为由之前分配的变量组成的路径.我花了很多年时间试图绕过它,一直在搜索并找到关于绳索的东西,但似乎没有任何效果.我希望这是一件容易让我错过的事情,因为我无法相信_T变量很难. void folderdialog2() { PIDLIST_ABSOLUTE xx; PCTSTR startingfolder; startingfolder = _T("C:\\VSS\\" + caseref); xx = ILCreateFromPath(startingfolder); BROWSEINFO bi = { 0 }; bi.pidlRoot = xx; bi.lpszTitle = _T("Pick a Directory"); LPITEMIDLIST pidl = SHBrowseForFolder ( &bi ); if ( pidl != 0 ) { // get the name of the folder TCHAR path[MAX_PATH]; if ( SHGetPathFromIDList ( pidl, path ) ) { _tprintf ( _T("Selected Folder: %s\n"), path ); } // free memory used IMalloc * imalloc = 0; if ( SUCCEEDED( SHGetMalloc ( &imalloc )) ) { imalloc->Free ( pidl ); imalloc->Release ( ); } } }
...全文
3 点赞 收藏 1
写回复
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38087157 2019-09-12
而不是这个: PCTSTR startingfolder; startingfolder = _T("C:\\VSS\\" + caseref); 做这个: wstring const startingfolder = wstring() + L"C:\\VSS\\" + caseref; 并将您的字符串类型更改为宽字符串等,并确保在包含< windows.h>之前定义了UNICODE. Windows API使用16位wchar_t构建在UTF-16字符串表示上.当您使用ANSI函数时,它必须与宽字符底层API进行转换.所以使用ANSI字符串是 >效率低下.>有限(无法处理常规Unicode字符).>还有很多额外的工作,而且很可能还有很多错误. 你需要支持ANSI,如果你使用的是仍然可以针对Windows 9x的旧工具,你的意思是针对Windows 9x,你不能使用Layer for Unicode,因为你在DLL中使用MFC并且你感觉不到你要重建那个.但是你真的在DLL中使用MFC定位Windows 9x并使用足够旧的工具吗?我对此表示怀疑! 所以,到处使用宽字符串. 总结一下,忘掉那些愚蠢的_T宏.
回复
相关推荐
发帖
其他技术讨论专区
创建于2021-05-12

96

社区成员

其他技术讨论专区
申请成为版主
帖子事件
创建了帖子
2019-09-12 12:27
社区公告
暂无公告