Files
Work/com/variant.cpp
2024-08-07 09:12:07 -04:00

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();
}