// Overcome the mess of Currency vs. custom types etc.
ErrCode returnInt64InOutArg(SbxArray *pArgs, SbxVariable &rRetVal,
sal_Int64 nValue)
{ if (!rRetVal.PutLong(1) && !rRetVal.PutInteger(1)) return ERRCODE_BASIC_BAD_ARGUMENT; if (!pArgs || pArgs->Count() != 2) return ERRCODE_BASIC_BAD_ARGUMENT;
SbxVariable* pOut = pArgs->Get(1); if (!pOut) return ERRCODE_BASIC_BAD_ARGUMENT; if (pOut->IsCurrency())
{
pOut->PutCurrency(nValue); return ERRCODE_NONE;
} if (!pOut->IsObject()) return ERRCODE_BASIC_BAD_ARGUMENT;
// FIXME: should we clone this and use pOut->PutObject ?
SbxObject* pObj = dynamic_cast<SbxObject*>( pOut->GetObject() ); if (!pObj) return ERRCODE_BASIC_BAD_ARGUMENT;
// We expect two Longs but other mappings could be possible too.
SbxArray* pProps = pObj->GetProperties(); if (pProps->Count() != 2) return ERRCODE_BASIC_BAD_ARGUMENT;
SbxVariable* pLow = pProps->Get(0);
SbxVariable* pHigh = pProps->Get(1); if (!pLow || !pLow->IsLong() ||
!pHigh || !pHigh->IsLong()) return ERRCODE_BASIC_BAD_ARGUMENT;
pLow->PutLong(nValue & 0xffffffff);
pHigh->PutLong(nValue >> 32); return ERRCODE_NONE;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.