Any any;
CComVariant var( pUnk);
any <<= (sal_uIntPtr) &var;
sal_uInt8 arId[16];
rtl_getGlobalProcessId( arId);
Any target= xSuppl->createBridge( any, Sequence<sal_Int8>( (sal_Int8*)arId, 16), OLE, UNO );
TheparameteroutArgs,indicescorrespondtothesequenceswhichare argumentstoXInvocation::invoke
*/ bool checkOutArgs(const Sequence<Any> & outArgs, const Sequence<sal_Int16> & indices, const Sequence<Any> & values)
{ if (values.getLength() != outArgs.getLength()) returnfalse; //iterate over all parameters. i represents the parameter index for (int i = 0; i < values.getLength(); i++)
{ if (values[i].getValueType() == cppu::UnoType<void>::get()) continue; //out parameter //Based on the parameter index find the correspondent out value int indexOutSeq = -1; for (int iIndices = indices.getLength() - 1; iIndices >= 0; iIndices --)
{ if (indices[iIndices] == i)
{
indexOutSeq = iIndices; break;
}
} if (indexOutSeq == -1) returnfalse;
Any value;
Any out;
values[i] >>= value;
outArgs[indexOutSeq] >>=out;
NamedArgument naVal;
NamedArgument naOut;
value >>= naVal;
out >>= naOut; if (values[i].getValueType() == cppu::UnoType<NamedArgument>::get())
{
NamedArgument inNamed;
values[i] >>= inNamed;
value <<= inNamed.Value;
} if (value != outArgs[indexOutSeq]) returnfalse;
} returntrue;
}
/* The returned sequence always contains Any elements
*/ bool equalSequences(const Any& orig, const Any& returned)
{ if (orig.getValueTypeClass() != TypeClass_SEQUENCE)
{
OSL_ASSERT(0); returnfalse;
}
TypeDescription td(orig.getValueTypeRef());
typelib_IndirectTypeDescription * indirect_td = (typelib_IndirectTypeDescription *) td.get();
switch (indirect_td->pType->eTypeClass)
{ case TypeClass_CHAR:
{
Sequence<sal_Unicode> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_BOOLEAN:
{
Sequence<sal_Bool> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_BYTE:
{
Sequence<sal_Int8> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_SHORT:
{
Sequence<sal_Int16> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_LONG:
{
Sequence<sal_Int32> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_FLOAT:
{
Sequence<float> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_DOUBLE:
{
Sequence<double> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_STRING:
{
Sequence<OUString> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_ANY:
{
Sequence<Any> seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} case TypeClass_SEQUENCE:
{ //Sequence<sal_Unicode> seq; //orig >>= seq; //Sequence<Any> seq2; //returned >>= seq2; //return equalSequences(seq, seq2); break;
} case TypeClass_INTERFACE:
{
Sequence<Reference<XInvocation> > seq;
orig >>= seq;
Sequence<Any> seq2;
returned >>= seq2; return equalSequences(seq, seq2);
} default: returnfalse;
} returnfalse;
}
template< class T > bool equalSequences(const Sequence<T>& seqIn, const Sequence<Any> & seqOut)
{ if (seqIn.getLength() != seqOut.getLength()) returnfalse; int len = seqIn.getLength(); for (int i = 0; i < len; i++)
{
Any anyIn;
anyIn <<= seqIn[i];
Any anyOut = seqOut[i]; if (anyIn != anyOut) returnfalse;
}
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.