diff options
Diffstat (limited to 'src/activeqt/shared/qaxtypes.cpp')
-rw-r--r-- | src/activeqt/shared/qaxtypes.cpp | 53 |
1 files changed, 35 insertions, 18 deletions
diff --git a/src/activeqt/shared/qaxtypes.cpp b/src/activeqt/shared/qaxtypes.cpp index 98b3cc8..bbb782c 100644 --- a/src/activeqt/shared/qaxtypes.cpp +++ b/src/activeqt/shared/qaxtypes.cpp @@ -50,6 +50,7 @@ #include <qpixmap.h> #include <qpainter.h> #include <qobject.h> +#include <qdebug.h> #ifdef QAX_SERVER # include <qaxfactory.h> # include <private/qsystemlibrary_p.h> @@ -207,6 +208,12 @@ static DATE QDateTimeToDATE(const QDateTime &dt) return vtime; } +static QByteArray msgOutParameterNotSupported(const QByteArray &type) +{ + return QByteArrayLiteral("QVariantToVARIANT: out-parameter not supported for \"") + + type + QByteArrayLiteral("\"."); +} + /* Converts \a var to \a arg, and tries to coerce \a arg to \a type. @@ -667,13 +674,15 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type break; } + if (out) { + qWarning().noquote() << msgOutParameterNotSupported("records"); + arg.vt = VT_EMPTY; + arg.byref = Q_NULLPTR; + return false; + } arg.vt = VT_RECORD; arg.pRecInfo = recordInfo, arg.pvRecord = record; - if (out) { - qWarning("QVariantToVARIANT: out-parameter not supported for records"); - return false; - } } break; #endif // QAX_SERVER @@ -685,30 +694,40 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type subType.truncate(subType.length() - 1); #endif if (!qstrcmp(qvar.typeName(), "IDispatch*")) { + if (out) { + qWarning().noquote() << msgOutParameterNotSupported(qvar.typeName()); + arg.vt = VT_EMPTY; + arg.byref = Q_NULLPTR; + return false; + } arg.vt = VT_DISPATCH; arg.pdispVal = *(IDispatch**)qvar.data(); if (arg.pdispVal) arg.pdispVal->AddRef(); - if (out) { - qWarning("QVariantToVARIANT: out-parameter not supported for IDispatch"); - return false; - } } else if (!qstrcmp(qvar.typeName(), "IDispatch**")) { arg.vt = VT_DISPATCH; arg.ppdispVal = *(IDispatch***)qvar.data(); if (out) arg.vt |= VT_BYREF; } else if (!qstrcmp(qvar.typeName(), "IUnknown*")) { + if (out) { + qWarning().noquote() << msgOutParameterNotSupported(qvar.typeName()); + arg.vt = VT_EMPTY; + arg.byref = Q_NULLPTR; + return false; + } arg.vt = VT_UNKNOWN; arg.punkVal = *(IUnknown**)qvar.data(); if (arg.punkVal) arg.punkVal->AddRef(); +#ifdef QAX_SERVER + } else if (qAxFactory()->metaObject(QString::fromLatin1(subType.constData()))) { if (out) { - qWarning("QVariantToVARIANT: out-parameter not supported for IUnknown"); + qWarning().noquote() << msgOutParameterNotSupported("subtype"); + arg.vt = VT_EMPTY; + arg.byref = Q_NULLPTR; return false; } -#ifdef QAX_SERVER - } else if (qAxFactory()->metaObject(QString::fromLatin1(subType.constData()))) { arg.vt = VT_DISPATCH; void *user = *(void**)qvar.constData(); // qVariantGet(qvar, user, qvar.typeName()); @@ -717,20 +736,18 @@ bool QVariantToVARIANT(const QVariant &var, VARIANT &arg, const QByteArray &type } else { qAxFactory()->createObjectWrapper(static_cast<QObject*>(user), &arg.pdispVal); } +#else + } else if (QMetaType::type(subType)) { if (out) { - qWarning("QVariantToVARIANT: out-parameter not supported for subtype"); + qWarning().noquote() << msgOutParameterNotSupported("subtype"); + arg.vt = VT_EMPTY; + arg.byref = Q_NULLPTR; return false; } -#else - } else if (QMetaType::type(subType)) { QAxObject *object = *(QAxObject**)qvar.constData(); // qVariantGet(qvar, object, subType); arg.vt = VT_DISPATCH; object->queryInterface(IID_IDispatch, (void**)&arg.pdispVal); - if (out) { - qWarning("QVariantToVARIANT: out-parameter not supported for subtype"); - return false; - } #endif } else { return false; |