]> git.saurik.com Git - wxWidgets.git/commitdiff
use standard functions for BSTR handling instead of doing it ourselves incorrectly...
authorVadim Zeitlin <vadim@wxwidgets.org>
Tue, 13 Nov 2007 01:18:06 +0000 (01:18 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Tue, 13 Nov 2007 01:18:06 +0000 (01:18 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49882 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

include/wx/msw/ole/oleutils.h
src/msw/ole/oleutils.cpp

index b70a76ade8d0948b158a3f4da034426ed110de5c..81c063701a3d7753978e1dd96071027a40d1625d 100644 (file)
@@ -208,24 +208,21 @@ class WXDLLEXPORT wxBasicString
 {
 public:
     // ctors & dtor
-    wxBasicString(const char *sz);
     wxBasicString(const wxString& str);
+    wxBasicString(const wxBasicString& bstr);
     ~wxBasicString();
 
-    void Init(const char* sz);
+    wxBasicString& operator=(const wxBasicString& bstr);
 
     // accessors
-    // just get the string
-    operator BSTR() const { return m_wzBuf; }
-    // retrieve a copy of our string - caller must SysFreeString() it later!
-    BSTR Get() const { return SysAllocString(m_wzBuf); }
+        // just get the string
+    operator BSTR() const { return m_bstrBuf; }
+        // retrieve a copy of our string - caller must SysFreeString() it later!
+    BSTR Get() const { return SysAllocString(m_bstrBuf); }
 
 private:
-    // @@@ not implemented (but should be)
-    wxBasicString(const wxBasicString&);
-    wxBasicString& operator=(const wxBasicString&);
-
-    OLECHAR *m_wzBuf;     // actual string
+    // actual string
+    BSTR m_bstrBuf;
 };
 
 #if wxUSE_VARIANT
index ca0289188a89fcf562c4aa8f773b2d5ce84ef35c..1c37542f383283eedbc4eb18422f503311f8c4eb 100644 (file)
@@ -91,49 +91,25 @@ WXDLLEXPORT wxString wxConvertStringFromOle(BSTR bStr)
 // wxBasicString
 // ----------------------------------------------------------------------------
 
-// ctor takes an ANSI string and transforms it to Unicode
-wxBasicString::wxBasicString(const char *sz)
+wxBasicString::wxBasicString(const wxString& str)
 {
-    Init(sz);
+    m_bstrBuf = SysAllocString(str.wc_str(*wxConvCurrent));
 }
 
-// ctor takes an ANSI or Unicode string and transforms it to Unicode
-wxBasicString::wxBasicString(const wxString& str)
+wxBasicString::wxBasicString(const wxBasicString& src)
 {
-#if wxUSE_UNICODE
-    m_wzBuf = new OLECHAR[str.length() + 1];
-    memcpy(m_wzBuf, str.c_str(), str.length()*2);
-    m_wzBuf[str.length()] = L'\0';
-#else
-    Init(str.c_str());
-#endif
+    m_bstrBuf = src.Get();
 }
 
-// Takes an ANSI string and transforms it to Unicode
-void wxBasicString::Init(const char *sz)
+wxBasicString& wxBasicString::operator=(const wxBasicString& src)
 {
-    // get the size of required buffer
-    UINT lenAnsi = strlen(sz);
-#ifdef __MWERKS__
-    UINT lenWide = lenAnsi * 2 ;
-#else
-    UINT lenWide = mbstowcs(NULL, sz, lenAnsi);
-#endif
-
-    if ( lenWide > 0 ) {
-        m_wzBuf = new OLECHAR[lenWide + 1];
-        mbstowcs(m_wzBuf, sz, lenAnsi);
-        m_wzBuf[lenWide] = L'\0';
-    }
-    else {
-        m_wzBuf = NULL;
-    }
+    SysReAllocString(&m_bstrBuf, src);
+    return *this;
 }
 
-// dtor frees memory
 wxBasicString::~wxBasicString()
 {
-  delete [] m_wzBuf;
+    SysFreeString(m_bstrBuf);
 }
 
 #if wxUSE_DATAOBJ