I’m trying to convert a wchar_t * to BSTR.
#include <iostream>
#include <atlstr.h>
using namespace std;
int main()
{
wchar_t* pwsz = L"foo";
BSTR bstr(pwsz);
cout << SysStringLen(bstr) << endl;
getchar();
}
This prints 0, which is less than what I’d hoped. What is the correct way to do this conversion?
You need to use SysAllocString (and then SysFreeString).
A
BSTRis a managed string with the characters of the string prefixed by their length.SysAllocStringallocates the correct amount of storage and set up the length and contents of the string correctly. With theBSTRcorrectly initialized,SysStringLenshould return the correct length.If you’re using C++ you might want to consider using a RAII style class (or even Microsoft’s
_bstr_t) to ensure that you don’t forget anySysFreeStringcalls.