Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将LPWST转换或转换为BSTR_C++_Windows_Wchar - Fatal编程技术网

C++ 将LPWST转换或转换为BSTR

C++ 将LPWST转换或转换为BSTR,c++,windows,wchar,C++,Windows,Wchar,如何将LPWSTR转换为BSTR?LPWSTR是WCHAR*,BSTR是OLECHAR*,OLECHAR又是WCHAR类型,简单的类型转换可以工作吗?或者我们需要做一些额外的努力?它显示错误的转换错误/警告。您可以这样做 BSTR pBstr = SysAllocString(szWCharString); // do something with the BSTR here ... SysFreeString(pBstr); 您必须记住,在转换之后调用SysFreeString来释放用于

如何将LPWSTR转换为BSTR?LPWSTR是WCHAR*,BSTR是OLECHAR*,OLECHAR又是WCHAR类型,简单的类型转换可以工作吗?或者我们需要做一些额外的努力?它显示错误的转换错误/警告。

您可以这样做

BSTR pBstr = SysAllocString(szWCharString);

// do something with the BSTR here ...

SysFreeString(pBstr);

您必须记住,在转换之后调用SysFreeString来释放用于转换的空间。

BSTR由一个OLECHAR[]和字符串前面的长度信息组成。BSTR是指向OLECHAR[]部分的指针。但是BSTR函数需要长度信息(容量和当前长度)


您需要函数来分配整个结构。

谢谢罗杰,实际上我有一个函数,它以BSTR为参数,当我将LPWSTR作为参数传递时,它显示错误的转换错误/警告。@a是的,它(编译器)告诉您必须传递正确的对象。你不能投,因为这是另一回事。因此,您必须创建一个新对象(BSTR)并将其传递给函数。使用后不要忘记释放物品。不,你不能。
LPWSTR
变量不是与
SysAllocString
一起分配的,而是一个4字节的简单变量。但是,当您有一个BSTR指针,并将该值强制转换为
LPWSTR
时,您可以将该指针传递给
SysFreeString
,同时隐式地将其强制转换为BSTR。但你有责任这样做。通常情况下,强制转换是在表达式中进行的,它比编译器更好,并且您应该有信心采用这种尖刻的方式。如果答案解决了您的问题,您可以单击“接受”复选框。