gpt4 book ai didi

c++ - 在 std::string 上使用 _T

转载 作者:太空狗 更新时间:2023-10-29 20:43:23 24 4
gpt4 key购买 nike

我正在尝试使用这行代码

startingfolder = _T("C:\\VSS\\" +  caseref);

但据我所知,我不允许在变量上使用 _T。基本上我试图将 SHBrowseForFolder 的起始文件夹设置为由先前分配的变量组成的路径。我花了很长时间试图绕过它,一直在搜索并找到有关 wstrings 的东西,但似乎没有任何效果。我希望这是我错过的简单的事情,因为我不敢相信 _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 ( );
}
}

}

最佳答案

你可以这样做:

startingfolder = _T("C:\\VSS\\") +  caseref;

但是如果 caseref 被声明为 std::string,当您使用 Unicode 字符集时,这将无法编译。另一方面,如果您将它声明为 std::wstring,当您使用多字节字符集时它不会编译。

如果您需要您的程序支持这两种字符集,一种可能的方法是使用预处理器指令定义类型别名 tstring 解析为 std::wstring如果定义了 _UNICODE 符号,如果没有定义则进入 std::string,并将您的字符串变量声明为 tstring

#ifdef _UNICODE
typedef std::wstring tstring;
#else
typedef std::string tstring;
#endif

tstring casref = _T("something");
tstring startingfolder = _T("C:\\VSS\\") + caseref;

但是请注意,非史前(即任何基于 NT 的)Windows 版本在内部使用 Unicode 字符,因此如果您没有特殊原因支持这两种配置,只需删除那些丑陋的宏(包括 _T) 并结合 std::wstring 为字符串文字使用 L 前缀(例如 L"Hello") (以及广泛版本的流,如果您正在使用它们的话)。

关于c++ - 在 std::string 上使用 _T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15455969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com