|
|
#include "procs.hxx"
#pragma hdrstop
#include "macro.h"
HRESULT PackStringinVariant( BSTR bstrString, VARIANT * pvarInputData ) { HRESULT hr = S_OK;
if ( bstrString == NULL ) RRETURN(E_FAIL);
VariantInit(pvarInputData);
pvarInputData->vt = VT_BSTR;
if (!bstrString) { V_BSTR(pvarInputData) = NULL; RRETURN(S_OK); }
hr = ADsAllocString(bstrString, &(V_BSTR(pvarInputData)));
RRETURN(hr); }
HRESULT UnpackStringfromVariant( VARIANT varSrcData, BSTR * pbstrDestString ) { HRESULT hr = S_OK;
if( varSrcData.vt != VT_BSTR){ RRETURN(E_ADS_CANT_CONVERT_DATATYPE); }
if (!V_BSTR(&varSrcData)) { *pbstrDestString = NULL; RRETURN(S_OK); }
hr = ADsAllocString(V_BSTR(&varSrcData), pbstrDestString);
RRETURN(hr); }
HRESULT PackLONGinVariant( LONG lValue, VARIANT * pvarInputData ) { VariantInit(pvarInputData);
pvarInputData->vt = VT_I4; V_I4(pvarInputData) = lValue;
RRETURN(S_OK); }
HRESULT UnpackLONGfromVariant( VARIANT varSrcData, LONG * plValue ) { if( varSrcData.vt != VT_I4){ RRETURN(E_ADS_CANT_CONVERT_DATATYPE); }
*plValue = V_I4(&varSrcData);
RRETURN(S_OK); }
HRESULT PackDATEinVariant( DATE daValue, VARIANT * pvarInputData ) { VariantInit(pvarInputData);
pvarInputData->vt = VT_DATE; V_DATE(pvarInputData) = daValue;
RRETURN(S_OK); }
HRESULT UnpackDATEfromVariant( VARIANT varSrcData, DATE * pdaValue ) { if( varSrcData.vt != VT_DATE){ RRETURN(E_ADS_CANT_CONVERT_DATATYPE); }
*pdaValue = V_DATE(&varSrcData);
RRETURN(S_OK); }
HRESULT PackFILETIMEinVariant( DATE daValue, VARIANT * pvarInputData ) { IADsLargeInteger *pTime = NULL; VARIANT var; SYSTEMTIME systemtime; FILETIME filetime; HRESULT hr = S_OK;
if (VariantTimeToSystemTime(daValue, &systemtime) == 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); } if (SystemTimeToFileTime(&systemtime, &filetime) == 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if (LocalFileTimeToFileTime(&filetime, &filetime ) == 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
hr = CoCreateInstance( CLSID_LargeInteger, NULL, CLSCTX_ALL, IID_IADsLargeInteger, (void**)&pTime ); BAIL_ON_FAILURE(hr);
hr = pTime->put_HighPart(filetime.dwHighDateTime); BAIL_ON_FAILURE(hr); hr = pTime->put_LowPart(filetime.dwLowDateTime); BAIL_ON_FAILURE(hr);
VariantInit(pvarInputData); pvarInputData->pdispVal = pTime; pvarInputData->vt = VT_DISPATCH;
error: return hr; }
HRESULT UnpackFILETIMEfromVariant( VARIANT varSrcData, DATE * pdaValue ) { IADsLargeInteger *pLarge = NULL; IDispatch *pDispatch = NULL; FILETIME filetime; FILETIME locFiletime; SYSTEMTIME systemtime; DATE date; HRESULT hr = S_OK;
if( varSrcData.vt != VT_DISPATCH){ RRETURN(E_ADS_CANT_CONVERT_DATATYPE); }
pDispatch = varSrcData.pdispVal; hr = pDispatch->QueryInterface(IID_IADsLargeInteger, (VOID **) &pLarge); BAIL_ON_FAILURE(hr);
hr = pLarge->get_HighPart((long*)&filetime.dwHighDateTime); BAIL_ON_FAILURE(hr);
hr = pLarge->get_LowPart((long*)&filetime.dwLowDateTime); BAIL_ON_FAILURE(hr);
if (FileTimeToLocalFileTime(&filetime, &locFiletime) == 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if (FileTimeToSystemTime(&locFiletime, &systemtime) == 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); }
if (SystemTimeToVariantTime(&systemtime, &date) == 0) { hr = E_FAIL; BAIL_ON_FAILURE(hr); } *pdaValue = date; error: return hr; }
HRESULT PackVARIANT_BOOLinVariant( VARIANT_BOOL fValue, VARIANT * pvarInputData ) { VariantInit(pvarInputData);
pvarInputData->vt = VT_BOOL; V_BOOL(pvarInputData) = fValue;
RRETURN(S_OK); }
HRESULT UnpackVARIANT_BOOLfromVariant( VARIANT varSrcData, VARIANT_BOOL * pfValue ) { if( varSrcData.vt != VT_BOOL){ RRETURN(E_ADS_CANT_CONVERT_DATATYPE); }
*pfValue = V_BOOL(&varSrcData);
RRETURN(S_OK); }
HRESULT PackVARIANTinVariant( VARIANT vaValue, VARIANT * pvarInputData ) { VariantInit(pvarInputData);
pvarInputData->vt = VT_VARIANT; RRETURN( VariantCopy( pvarInputData, &vaValue )); }
HRESULT UnpackVARIANTfromVariant( VARIANT varSrcData, VARIANT * pvaValue ) { VariantInit( pvaValue );
RRETURN( VariantCopy( pvaValue, &varSrcData )); }
|