{
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
// 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