我尝试使用此代码:
USES_CONVERSION;
LPWSTR temp = A2W(selectedFileName);
但是当我检查
temp
变量时,只需获取第一个字符提前致谢
最佳答案
如果我没记错的话,CString
的类型定义为CStringA
或CStringW
,这取决于您是否正在构建Unicode。
LPWSTR是“指向广泛STRing的长指针”-aka:wchar_t*
如果要将CString传递给采用LPWSTR的函数,则可以执行以下操作:
some_function(LPWSTR str);
// if building in unicode:
some_function(selectedFileName);
// if building in ansi:
some_function(CA2W(selectedFileName));
// The better way, especially if you're building in both string types:
some_function(CT2W(selectedFileName));
的方法 LPWSTR是对字符串的非常量访问。您是否正在使用试图修改字符串的函数?如果是这样,则要使用实际的缓冲区,而不是CString。
另外,当您“检查”
temp
时-您是什么意思?您尝试了cout << temp
吗?因为那不起作用(它将仅显示第一个字符):char
每个字符使用一个字节。 wchar_t
每个字符使用两个字节。对于普通英语,当您将其转换为宽字符串时,它使用与原始字符串相同的字节,但是每个字符都填充为零。由于NULL终止符也为零,因此,如果使用调试器或cout较差(使用ANSI文本),则只会看到第一个字符。如果要打印宽字符串以标准输出,请使用
wcout
。