diff options
Diffstat (limited to 'src/activeqt/container/qaxbase.cpp')
-rw-r--r-- | src/activeqt/container/qaxbase.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp index 722a389..18c662e 100644 --- a/src/activeqt/container/qaxbase.cpp +++ b/src/activeqt/container/qaxbase.cpp @@ -60,6 +60,7 @@ #include <qhash.h> #include <qset.h> #include <qpair.h> +#include <qbitarray.h> #include <qmetaobject.h> #include <qsettings.h> #include <qdebug.h> @@ -3947,9 +3948,11 @@ bool QAxBase::dynamicCallHelper(const char *name, void *inout, QList<QVariant> & disptype = DISPATCH_PROPERTYGET; } } + QBitArray outArgs; if (varc) { varc = qMin(varc, d->metaobj->numParameter(normFunction)); arg = varc <= QAX_NUM_PARAMS ? staticarg : new VARIANT[varc]; + outArgs = QBitArray(varc); for (int i = 0; i < varc; ++i) { QVariant var(vars.at(i)); VariantInit(arg + (varc - i - 1)); @@ -3972,6 +3975,7 @@ bool QAxBase::dynamicCallHelper(const char *name, void *inout, QList<QVariant> & if (arg[varc - i - 1].vt == VT_EMPTY) QVariantToVARIANT(var, arg[varc - i - 1], paramType, out); + outArgs[i] = out; } } @@ -4004,7 +4008,7 @@ bool QAxBase::dynamicCallHelper(const char *name, void *inout, QList<QVariant> & if (disptype == (DISPATCH_METHOD|DISPATCH_PROPERTYGET) && hres == S_OK && varc) { for (int i = 0; i < varc; ++i) - if (arg[varc-i-1].vt & VT_BYREF) // update out-parameters + if ((arg[varc-i-1].vt & VT_BYREF) || outArgs[i]) // update out-parameters vars[i] = VARIANTToQVariant(arg[varc-i-1], vars.at(i).typeName()); } |