diff dwt/ole/win32/Variant.d @ 98:ecba636b634e

package dwt/ole
author Frank Benoit <benoit@tionex.de>
date Sat, 09 Feb 2008 03:36:27 +0100
parents 2e6eb5bd2c16
children 619faee45ef6
line wrap: on
line diff
--- a/dwt/ole/win32/Variant.d	Fri Feb 08 19:49:32 2008 +0100
+++ b/dwt/ole/win32/Variant.d	Sat Feb 09 03:36:27 2008 +0100
@@ -7,6 +7,8 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ * Port to the D programming language:
+ *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
 module dwt.ole.win32.Variant;
 
@@ -278,30 +280,27 @@
  */
 public OleAutomation getAutomation() {
     if (type is COM.VT_EMPTY) {
-        OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, -1);
+        OLE.error(__FILE__, __LINE__, OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, -1);
     }
     if (type is COM.VT_DISPATCH) {
         return new OleAutomation(dispatchData);
     }
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        HRESULT result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_DISPATCH);
+        getData(&oldPtr);
+        HRESULT result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_DISPATCH);
         if (result !is COM.S_OK)
-            OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
+            OLE.error(__FILE__, __LINE__, OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant autoVar = new Variant();
-        autoVar.setData(newPtr);
+        autoVar.setData(&newPtr);
         return autoVar.getAutomation();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr); // Note: This must absolutely be done AFTER the
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr); // Note: This must absolutely be done AFTER the
                                   // OleAutomation object is created as Variant Clear
                                   // will result in a Release being performed on the
                                   // Dispatch object
-        OS.GlobalFree(newPtr);
     }
 }
 /**
@@ -321,30 +320,28 @@
  */
 public IDispatch getDispatch() {
     if (type is COM.VT_EMPTY) {
-        OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, -1);
+        OLE.error(__FILE__, __LINE__, OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, -1);
     }
+
     if (type is COM.VT_DISPATCH) {
         return dispatchData;
     }
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_DISPATCH);
+        getData(&oldPtr);
+        HRESULT result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_DISPATCH);
         if (result !is COM.S_OK)
-            OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
+            OLE.error(__FILE__, __LINE__, OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant autoVar = new Variant();
-        autoVar.setData(newPtr);
+        autoVar.setData(&newPtr);
         return autoVar.getDispatch();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr); // Note: This must absolutely be done AFTER the
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr); // Note: This must absolutely be done AFTER the
                                   // OleAutomation object is created as Variant Clear
                                   // will result in a Release being performed on the
                                   // Dispatch object
-        OS.GlobalFree(newPtr);
     }
 }
 /**
@@ -362,28 +359,24 @@
  */
 public bool getBoolean() {
     if (type is COM.VT_EMPTY) {
-        OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, -1);
+        OLE.error(__FILE__, __LINE__, OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, -1);
     }
     if (type is COM.VT_BOOL) {
         return booleanData;
     }
-
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_BOOL);
+        getData(&oldPtr);
+        HRESULT result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_BOOL);
         if (result !is COM.S_OK)
-            OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
+            OLE.error(__FILE__, __LINE__, OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant boolVar = new Variant();
-        boolVar.setData(newPtr);
+        boolVar.setData(&newPtr);
         return boolVar.getBoolean();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 /**
@@ -427,21 +420,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_I1);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_I1);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant byteVar = new Variant();
-        byteVar.setData(newPtr);
+        byteVar.setData(&newPtr);
         return byteVar.getByte();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 /**
@@ -467,21 +457,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_UI2);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_UI2);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant charVar = new Variant();
-        charVar.setData(newPtr);
+        charVar.setData(&newPtr);
         return charVar.getChar();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 void getData(VARIANT* pData){
@@ -581,21 +568,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_R8);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_R8);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant doubleVar = new Variant();
-        doubleVar.setData(newPtr);
+        doubleVar.setData(&newPtr);
         return doubleVar.getDouble();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 
@@ -620,21 +604,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_R4);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_R4);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant floatVar = new Variant();
-        floatVar.setData(newPtr);
+        floatVar.setData(&newPtr);
         return floatVar.getFloat();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 
 }
@@ -659,21 +640,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_I4);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_I4);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant intVar = new Variant();
-        intVar.setData(newPtr);
+        intVar.setData(&newPtr);
         return intVar.getInt();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 /**
@@ -699,21 +677,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_I8);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_I8);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant longVar = new Variant();
-        longVar.setData(newPtr);
+        longVar.setData(&newPtr);
         return longVar.getLong();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 /**
@@ -737,21 +712,18 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_I2);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_I2);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant shortVar = new Variant();
-        shortVar.setData(newPtr);
+        shortVar.setData(&newPtr);
         return shortVar.getShort();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 
 }
@@ -776,23 +748,20 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_BSTR);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_BSTR);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
 
         Variant stringVar = new Variant();
-        stringVar.setData(newPtr);
+        stringVar.setData(&newPtr);
         return stringVar.getString();
 
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr);
-        OS.GlobalFree(newPtr);
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr);
     }
 }
 /**
@@ -830,24 +799,21 @@
     }
 
     // try to coerce the value to the desired type
-    auto oldPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
-    auto newPtr = cast(VARIANT*) OS.GlobalAlloc(COM.GMEM_FIXED | COM.GMEM_ZEROINIT, VARIANT.sizeof);
+    VARIANT oldPtr, newPtr;
     try {
-        getData(oldPtr);
-        int result = COM.VariantChangeType(newPtr, oldPtr, 0, COM.VT_UNKNOWN);
+        getData(&oldPtr);
+        int result = COM.VariantChangeType(&newPtr, &oldPtr, 0, COM.VT_UNKNOWN);
         if (result !is COM.S_OK)
             OLE.error(OLE.ERROR_CANNOT_CHANGE_VARIANT_TYPE, result);
         Variant unknownVar = new Variant();
-        unknownVar.setData(newPtr);
+        unknownVar.setData(&newPtr);
         return unknownVar.getUnknown();
     } finally {
-        COM.VariantClear(oldPtr);
-        OS.GlobalFree(oldPtr);
-        COM.VariantClear(newPtr); // Note: This must absolutely be done AFTER the
+        COM.VariantClear(&oldPtr);
+        COM.VariantClear(&newPtr); // Note: This must absolutely be done AFTER the
                                   // IUnknown object is created as Variant Clear
                                   // will result in a Release being performed on the
                                   // Dispatch object
-        OS.GlobalFree(newPtr);
     }
 }
 /**