]> git.saurik.com Git - wxWidgets.git/blobdiff - src/msw/ole/automtn.cpp
don't crash when destroying a not initialized socket (patch 1489095)
[wxWidgets.git] / src / msw / ole / automtn.cpp
index 2a64cb87c15ecc754f493be01101485be1eb7bfe..28464845afae3d926efde7342e6b39122b975e56 100644 (file)
@@ -1,5 +1,5 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        automtn.cpp
+// Name:        src/msw/ole/automtn.cpp
 // Purpose:     OLE automation utilities
 // Author:      Julian Smart
 // Modified by:
 #include "wx/wxprec.h"
 
 #if defined(__BORLANDC__)
-#pragma hdrstop
+    #pragma hdrstop
 #endif
 
-#include "wx/defs.h"
-
 // Watcom C++ gives a linker error if this is compiled in.
 // With Borland C++, all samples crash if this is compiled in.
 #if wxUSE_OLE && !(defined(__BORLANDC__) && (__BORLANDC__ < 0x520)) && !defined(__CYGWIN10__)
 
+#ifndef WX_PRECOMP
+    #include "wx/log.h"
+#endif
+
 #define _FORCENAMELESSUNION
-#include "wx/log.h"
 #include "wx/msw/private.h"
 #include "wx/msw/ole/oleutils.h"
 #include "wx/msw/ole/automtn.h"
@@ -90,7 +91,7 @@ bool wxAutomationObject::Invoke(const wxString& member, int action,
     {
         // Use dot notation to get the next object
         wxString member2(nonConstMember.Left((size_t) ch));
-        wxString rest(nonConstMember.Right(nonConstMember.Length() - ch - 1));
+        wxString rest(nonConstMember.Right(nonConstMember.length() - ch - 1));
         wxAutomationObject obj;
         if (!GetObject(obj, member2))
             return false;
@@ -544,7 +545,7 @@ bool wxAutomationObject::CreateInstance(const wxString& classId) const
 }
 
 
-bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant)
+WXDLLEXPORT bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant)
 {
     ClearVariant(&oleVariant);
     if (variant.IsNull())
@@ -595,11 +596,11 @@ bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant)
     {
         wxDateTime date( variant.GetDateTime() );
         oleVariant.vt = VT_DATE;
-        
+
         long dosDateTime = date.GetAsDOS();
-        short dosDate = (dosDateTime & 0xFFFF0000) >> 16;
-        short dosTime = dosDateTime & 0xFFFF;
-        
+        short dosDate = short((dosDateTime & 0xFFFF0000) >> 16);
+        short dosTime = short(dosDateTime & 0xFFFF);
+
         DosDateTimeToVariantTime(dosDate, dosTime, & oleVariant.date);
     }
 #endif
@@ -666,7 +667,7 @@ bool wxConvertVariantToOle(const wxVariant& variant, VARIANTARG& oleVariant)
 #define VT_TYPEMASK 0xfff
 #endif
 
-bool wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant)
+WXDLLEXPORT bool wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant)
 {
     switch (oleVariant.vt & VT_TYPEMASK)
     {
@@ -682,7 +683,7 @@ bool wxConvertOleToVariant(const VARIANTARG& oleVariant, wxVariant& variant)
             unsigned short dosDate = 0;
             unsigned short dosTime = 0;
             VariantTimeToDosDateTime(oleVariant.date, & dosDate, & dosTime);
-            
+
             long dosDateTime = (dosDate << 16) || dosTime;
             wxDateTime date;
             date.SetFromDOS(dosDateTime);
@@ -851,9 +852,11 @@ static void ReleaseVariant(VARIANTARG *pvarg)
                 break;
 
             case VT_I2:
+            case VT_I4:
             case VT_BOOL:
             case VT_R8:
             case VT_ERROR:        // to avoid erroring on an error return from Excel
+            case VT_EMPTY:
                 // no work for these types
                 break;
 
@@ -930,4 +933,3 @@ void ShowException(LPOLESTR szMember, HRESULT hr, EXCEPINFO *pexcep, unsigned in
 #endif
 
 #endif // wxUSE_OLE && !(defined(__BORLANDC__) && (__BORLANDC__ < 0x520)) && !defined(__CYGWIN10__)
-