WXDLLEXPORT wxString wxConvertStringFromOle(BSTR bStr)
{
+ // NULL BSTR is equivalent to an empty string (this is the convention used
+ // by VB and hence we must follow it)
+ if ( !bStr )
+ return wxString();
+
+ const int len = SysStringLen(bStr);
+
#if wxUSE_UNICODE
- wxString str(bStr);
+ wxString str(bStr, len);
#else
- int len = SysStringLen(bStr) + 1;
- char *buf = new char[len];
- (void)wcstombs( buf, bStr, len);
- wxString str(buf);
- delete[] buf;
+ wxString str;
+ if (len)
+ {
+ wxStringBufferLength buf(str, len); // asserts if len == 0
+ buf.SetLength(WideCharToMultiByte(CP_ACP, 0 /* no flags */,
+ bStr, len /* not necessarily NUL-terminated */,
+ buf, len,
+ NULL, NULL /* no default char */));
+ }
#endif
+
return str;
}