Mercurial > projects > dwt-win
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); } } /**