X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/e28985499b2e69531fdf6b562fdb143ec6441b8c..7a0a6cc8f61cb53ce1c76897489e1e363d1a1fa5:/src/msw/ole/oleutils.cpp diff --git a/src/msw/ole/oleutils.cpp b/src/msw/ole/oleutils.cpp index 6c9e409042..cd7dd75edc 100644 --- a/src/msw/ole/oleutils.cpp +++ b/src/msw/ole/oleutils.cpp @@ -21,13 +21,15 @@ #include "wx/wxprec.h" #if defined(__BORLANDC__) -#pragma hdrstop + #pragma hdrstop #endif -#include "wx/log.h" - #if wxUSE_OLE +#ifndef WX_PRECOMP + #include "wx/log.h" +#endif + #ifndef __CYGWIN10__ #include "wx/msw/private.h" @@ -68,29 +70,32 @@ bool IsIidFromList(REFIID riid, const IID *aIids[], size_t nCount) WXDLLEXPORT BSTR wxConvertStringToOle(const wxString& str) { -/* - unsigned int len = strlen((const char*) str); - unsigned short* s = new unsigned short[len*2+2]; - unsigned int i; - memset(s, 0, len*2+2); - for (i=0; i < len; i++) - s[i*2] = str[i]; -*/ - wxBasicString bstr(str.mb_str()); - return bstr.Get(); + 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(); + + 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; } @@ -98,49 +103,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 @@ -149,7 +130,7 @@ wxBasicString::~wxBasicString() // Debug support // ---------------------------------------------------------------------------- -#if defined(__WXDEBUG__) && ( ( defined(__VISUALC__) && (__VISUALC__ > 1000) ) || defined(__MWERKS__) ) +#if wxDEBUG_LEVEL && ( ( defined(__VISUALC__) && (__VISUALC__ > 1000) ) || defined(__MWERKS__) ) static wxString GetIidName(REFIID riid) { // an association between symbolic name and numeric value of an IID @@ -159,7 +140,7 @@ static wxString GetIidName(REFIID riid) }; // construct the table containing all known interfaces - #define ADD_KNOWN_IID(name) { &IID_I##name, _T(#name) } + #define ADD_KNOWN_IID(name) { &IID_I##name, wxT(#name) } static const KNOWN_IID aKnownIids[] = { ADD_KNOWN_IID(AdviseSink), @@ -277,31 +258,10 @@ void wxLogRelease(const wxChar *szInterface, ULONG cRef) wxLogTrace(wxTRACE_OleCalls, wxT("After %s::Release: m_cRef = %d"), szInterface, cRef - 1); } -#elif defined(__WXDEBUG__) && defined(__VISUALC__) && (__VISUALC__ <= 1000) +#endif // wxDEBUG_LEVEL -// For VC++ 4 -void wxLogQueryInterface(const char *szInterface, REFIID riid) -{ - wxLogTrace("%s::QueryInterface", szInterface); -} +#endif // wxUSE_DRAG_AND_DROP -void wxLogAddRef(const char *szInterface, ULONG cRef) -{ - wxLogTrace("After %s::AddRef: m_cRef = %d", szInterface, cRef + 1); -} +#endif // __CYGWIN10__ -void wxLogRelease(const char *szInterface, ULONG cRef) -{ - wxLogTrace("After %s::Release: m_cRef = %d", szInterface, cRef - 1); -} - -#endif // __WXDEBUG__ - -#endif - // wxUSE_DRAG_AND_DROP - -#endif - // __CYGWIN10__ - -#endif - // wxUSE_OLE +#endif // wxUSE_OLE