summaryrefslogtreecommitdiffstats
path: root/src/activeqt/container/qaxbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/activeqt/container/qaxbase.cpp')
-rw-r--r--src/activeqt/container/qaxbase.cpp6
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());
}