我尝试使用此代码:
USES_CONVERSION;
LPWSTR temp = A2W(selectedFileName);
但是当我检查temp
变量时,只需获取第一个字符
提前致谢
答案 0 :(得分:5)
如果我没记错,CString
是CStringA
或CStringW
的类型定义,具体取决于您是否构建Unicode。
LPWSTR是“广泛指向的长指针” - 又名: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));
HOWEVER LPWSTR是对字符串的非const访问。您是否正在使用尝试修改字符串的函数?如果是这样,您希望使用实际的缓冲区,而不是CString。
另外,当你“检查”temp
时 - 你的意思是什么?你试过cout << temp
吗?因为这不起作用(它只显示第一个字符):
char
每个字符使用一个字节。 wchar_t
每个字符使用两个字节。对于普通英语,当您将其转换为宽字符串时,它使用与原始字符串相同的字节,但每个字符都填充为零。由于NULL终止符也是零,如果使用较差的调试器或cout(使用ANSI文本),则只能看到第一个字符。
如果要将宽字符串打印到标准输出,请使用wcout
。
答案 1 :(得分:1)
简而言之:你做不到。如果需要一个指向CString
对象的基础字符缓冲区的非const指针,则需要调用GetBuffer
。
如果您需要 const 指针,则只需使用static_cast<LPCWSTR>(selectedFilename)
。
答案 2 :(得分:1)
我知道这是一个相当古老的问题,但我有同样的问题,之前的答案都没有对我有用。
然而,这对我的unicode构建起了作用:
LPWSTR temp = (LPWSTR)(LPCWSTR)selectedFileName;