X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7be1f0d91a912a73b110157170124830446e15e1..8ed889787fc07b3c45a747156389cc81a79130f6:/src/msw/ole/automtn.cpp diff --git a/src/msw/ole/automtn.cpp b/src/msw/ole/automtn.cpp index e16be59a32..f8bac3d400 100644 --- a/src/msw/ole/automtn.cpp +++ b/src/msw/ole/automtn.cpp @@ -21,13 +21,43 @@ #endif #include "wx/log.h" + +#include +#include + #include "wx/msw/ole/automtn.h" -#include +#include "wx/msw/private.h" + #include #include -#include -#include + +// wrapper around BSTR type (by Vadim Zeitlin) + +class WXDLLEXPORT BasicString +{ +public: + // ctors & dtor + BasicString(const char *sz); + ~BasicString(); + + // 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); } + +private: + // @@@ not implemented (but should be) + BasicString(const BasicString&); + BasicString& operator=(const BasicString&); + + OLECHAR *m_wzBuf; // actual string +}; + +// Convert variants +static bool ConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) ; +static bool ConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant) ; // Convert string to Unicode static BSTR ConvertStringToOle(const wxString& str); @@ -50,9 +80,6 @@ static int rgMonthDays[13] = static BOOL OleDateFromTm(WORD wYear, WORD wMonth, WORD wDay, WORD wHour, WORD wMinute, WORD wSecond, DATE& dtDest); static BOOL TmFromOleDate(DATE dtSrc, struct tm& tmDest); -static void TmConvertToStandardFormat(struct tm& tmSrc); -static double DoubleFromDate(DATE dt); -static DATE DateFromDouble(double dbl); static void ClearVariant(VARIANTARG *pvarg) ; static void ReleaseVariant(VARIANTARG *pvarg) ; @@ -463,7 +490,6 @@ bool wxAutomationObject::CreateInstance(const wxString& classId) const return FALSE; CLSID clsId; - IUnknown * pUnk = NULL; BasicString unicodeName((const char*) classId); @@ -484,7 +510,7 @@ bool wxAutomationObject::CreateInstance(const wxString& classId) const } -bool wxAutomationObject::ConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) +bool ConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant) { ClearVariant(&oleVariant); if (variant.IsNull()) @@ -508,7 +534,8 @@ bool wxAutomationObject::ConvertVariantToOle(const wxVariant& variant, VARIANTAR else if (type == "bool") { oleVariant.vt = VT_BOOL; -#ifdef __WATCOMC__ + // 'bool' required for VC++ 4 apparently +#if defined(__WATCOMC__) || (defined(__VISUALC__) && (__VISUALC__ <= 1000)) oleVariant.bool = variant.GetBool(); #else oleVariant.boolVal = variant.GetBool(); @@ -601,7 +628,7 @@ bool wxAutomationObject::ConvertVariantToOle(const wxVariant& variant, VARIANTAR #define VT_TYPEMASK 0xfff #endif -bool wxAutomationObject::ConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant) +bool ConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant) { switch (oleVariant.vt & VT_TYPEMASK) { @@ -636,8 +663,12 @@ bool wxAutomationObject::ConvertOleToVariant(const VARIANTARG& oleVariant, wxVar case VT_BOOL: { -#ifdef __WATCOMC__ +#if defined(__WATCOMC__) || (defined(_MSC_VER) && (_MSC_VER <= 1000)) //GC +#ifndef HAVE_BOOL // Can't use bool operator if no native bool type + variant = (long) (oleVariant.bool != 0); +#else variant = (bool) (oleVariant.bool != 0); +#endif #else variant = (bool) (oleVariant.boolVal != 0); #endif @@ -718,7 +749,7 @@ static wxString ConvertStringFromOle(BSTR bStr) { int len = SysStringLen(bStr) + 1; char *buf = new char[len]; - int i = wcstombs( buf, bStr, len); + (void)wcstombs( buf, bStr, len); wxString str(buf); delete[] buf; @@ -734,7 +765,11 @@ BasicString::BasicString(const char *sz) { // 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]; @@ -930,6 +965,8 @@ DoTime: return TRUE; } +// this function is not used +#if 0 void TmConvertToStandardFormat(struct tm& tmSrc) { // Convert afx internal tm to format expected by runtimes (_tcsftime, etc) @@ -962,6 +999,7 @@ DATE DateFromDouble(double dbl) double temp = floor(dbl); // dbl is now whole part return temp + (temp - dbl); } +#endif // 0 /* * ClearVariant