+ return false;
+}
+
+WXDLLEXPORT BSTR wxConvertStringToOle(const wxString& str)
+{
+ return wxBasicString(str).Get();
+}
+
+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();
+
+#if wxUSE_UNICODE
+ wxString str(bStr);
+#else
+ int len = SysStringLen(bStr) + 1;
+ char *buf = new char[len];
+ (void)wcstombs( buf, bStr, len);
+ wxString str(buf);
+ delete[] buf;
+#endif
+ return str;
+}
+
+// ----------------------------------------------------------------------------
+// wxBasicString
+// ----------------------------------------------------------------------------
+
+wxBasicString::wxBasicString(const wxString& str)
+{
+ m_bstrBuf = SysAllocString(str.wc_str(*wxConvCurrent));
+}
+
+wxBasicString::wxBasicString(const wxBasicString& src)
+{
+ m_bstrBuf = src.Get();
+}
+
+wxBasicString& wxBasicString::operator=(const wxBasicString& src)
+{
+ SysReAllocString(&m_bstrBuf, src);
+ return *this;
+}
+
+wxBasicString::~wxBasicString()
+{
+ SysFreeString(m_bstrBuf);