use standard functions for BSTR handling instead of doing it ourselves incorrectly (fixed patch 1829152)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@49882 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -208,24 +208,21 @@ class WXDLLEXPORT wxBasicString
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// ctors & dtor
|
// ctors & dtor
|
||||||
wxBasicString(const char *sz);
|
|
||||||
wxBasicString(const wxString& str);
|
wxBasicString(const wxString& str);
|
||||||
|
wxBasicString(const wxBasicString& bstr);
|
||||||
~wxBasicString();
|
~wxBasicString();
|
||||||
|
|
||||||
void Init(const char* sz);
|
wxBasicString& operator=(const wxBasicString& bstr);
|
||||||
|
|
||||||
// accessors
|
// accessors
|
||||||
// just get the string
|
// just get the string
|
||||||
operator BSTR() const { return m_wzBuf; }
|
operator BSTR() const { return m_bstrBuf; }
|
||||||
// retrieve a copy of our string - caller must SysFreeString() it later!
|
// retrieve a copy of our string - caller must SysFreeString() it later!
|
||||||
BSTR Get() const { return SysAllocString(m_wzBuf); }
|
BSTR Get() const { return SysAllocString(m_bstrBuf); }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// @@@ not implemented (but should be)
|
// actual string
|
||||||
wxBasicString(const wxBasicString&);
|
BSTR m_bstrBuf;
|
||||||
wxBasicString& operator=(const wxBasicString&);
|
|
||||||
|
|
||||||
OLECHAR *m_wzBuf; // actual string
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#if wxUSE_VARIANT
|
#if wxUSE_VARIANT
|
||||||
|
@@ -91,49 +91,25 @@ WXDLLEXPORT wxString wxConvertStringFromOle(BSTR bStr)
|
|||||||
// wxBasicString
|
// wxBasicString
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
// ctor takes an ANSI string and transforms it to Unicode
|
|
||||||
wxBasicString::wxBasicString(const char *sz)
|
|
||||||
{
|
|
||||||
Init(sz);
|
|
||||||
}
|
|
||||||
|
|
||||||
// ctor takes an ANSI or Unicode string and transforms it to Unicode
|
|
||||||
wxBasicString::wxBasicString(const wxString& str)
|
wxBasicString::wxBasicString(const wxString& str)
|
||||||
{
|
{
|
||||||
#if wxUSE_UNICODE
|
m_bstrBuf = SysAllocString(str.wc_str(*wxConvCurrent));
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Takes an ANSI string and transforms it to Unicode
|
wxBasicString::wxBasicString(const wxBasicString& src)
|
||||||
void wxBasicString::Init(const char *sz)
|
|
||||||
{
|
{
|
||||||
// get the size of required buffer
|
m_bstrBuf = src.Get();
|
||||||
UINT lenAnsi = strlen(sz);
|
}
|
||||||
#ifdef __MWERKS__
|
|
||||||
UINT lenWide = lenAnsi * 2 ;
|
wxBasicString& wxBasicString::operator=(const wxBasicString& src)
|
||||||
#else
|
{
|
||||||
UINT lenWide = mbstowcs(NULL, sz, lenAnsi);
|
SysReAllocString(&m_bstrBuf, src);
|
||||||
#endif
|
return *this;
|
||||||
|
|
||||||
if ( lenWide > 0 ) {
|
|
||||||
m_wzBuf = new OLECHAR[lenWide + 1];
|
|
||||||
mbstowcs(m_wzBuf, sz, lenAnsi);
|
|
||||||
m_wzBuf[lenWide] = L'\0';
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
m_wzBuf = NULL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// dtor frees memory
|
|
||||||
wxBasicString::~wxBasicString()
|
wxBasicString::~wxBasicString()
|
||||||
{
|
{
|
||||||
delete [] m_wzBuf;
|
SysFreeString(m_bstrBuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if wxUSE_DATAOBJ
|
#if wxUSE_DATAOBJ
|
||||||
|
Reference in New Issue
Block a user