58 lines
1.1 KiB
C++
58 lines
1.1 KiB
C++
#include <com/variant.hpp>
|
|
#include <com/safearray.hpp>
|
|
|
|
Variant::Variant(void)
|
|
: mDisposition(Delete)
|
|
{
|
|
init();
|
|
}
|
|
|
|
Variant::~Variant()
|
|
{
|
|
clear();
|
|
}
|
|
|
|
bool Variant::setData(SafeArray &safeArray)
|
|
{
|
|
if(!clear()||!safeArray.isOkay())return false;
|
|
tagVARIANT::vt=VTArray;
|
|
tagVARIANT::parray=safeArray.getSAFEARRAY();
|
|
return true;
|
|
}
|
|
|
|
bool Variant::getData(VariantType variantType,void *pData)
|
|
{
|
|
if(tagVARIANT::vt!=variantType)return false;
|
|
switch(variantType)
|
|
{
|
|
case VTInt :
|
|
*((int*)pData)=tagVARIANT::iVal;
|
|
return true;
|
|
case VTInt1 :
|
|
*((char*)pData)=tagVARIANT::bVal;
|
|
return true;
|
|
case VTInt2 :
|
|
*((short*)pData)=tagVARIANT::iVal;
|
|
return true;
|
|
case VTInt4 :
|
|
*((int*)pData)=tagVARIANT::lVal;
|
|
return true;
|
|
case VTBool :
|
|
*((bool*)pData)=tagVARIANT::boolVal;
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool Variant::getData(SafeArray &safeArray)
|
|
{
|
|
if(tagVARIANT::vt!=VTArray||!tagVARIANT::parray)return false;
|
|
try{safeArray.setSAFEARRAY(parray);}catch(SafeArray::SafeArrayNullPointerException){return false;}
|
|
return safeArray.isOkay();
|
|
}
|
|
|
|
|
|
|
|
|
|
|