StringCchCat函数 是否有可能使用字符串变量代替C++ >文本(“\**txt”)< /C> >在C++中的以下函数?< /P> StringCchCat (szDir, MAX_PATH, TEXT("\\*.txt"));

StringCchCat函数 是否有可能使用字符串变量代替C++ >文本(“\**txt”)< /C> >在C++中的以下函数?< /P> StringCchCat (szDir, MAX_PATH, TEXT("\\*.txt"));,c++,string,string-concatenation,C++,String,String Concatenation,例如: string ext = "\\*.pdf"; StringCchCat (szDir, MAX_PATH, ext); C++编译时返回错误: error C2664: 'StringCchCatW': can not convert parameter 3 from 'std :: string' to 'STRSAFE_LPCWSTR' 您的变量ext不是宽字符。实际上,正如@billz所指出的,它是String类型的。看看这个函数,微软似乎提供了3种重载形式——一种用于标准

例如:

string ext = "\\*.pdf";
StringCchCat (szDir, MAX_PATH, ext);
C++编译时返回错误:

error C2664: 'StringCchCatW': can not convert parameter 3 from 'std :: string' to 'STRSAFE_LPCWSTR'

您的变量
ext
不是宽字符。实际上,正如@billz所指出的,它是String类型的。看看这个函数,微软似乎提供了3种重载形式——一种用于标准字符,一种用于“TCHAR”,另一种用于宽字符。无论哪种方式,字符串都不会自动转换为字符类型,这就是为什么您应该使用c_str()函数。

是的,但它必须是宽字符串:

std::wstring ext = L"\\*.pdf";
StringCchCat(szDir, MAX_PATH, ext.c_str());
除非您在编译时未定义
UNICODE
,否则您的做法是错误的。

尝试
ext.c_str()
而不是
ext