diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/activeqt/container/qaxbase.cpp | 9 | ||||
-rw-r--r-- | src/activeqt/container/qaxbase.h | 14 | ||||
-rw-r--r-- | src/activeqt/control/qaxfactory.h | 13 | ||||
-rw-r--r-- | src/activeqt/control/qaxserver.cpp | 15 | ||||
-rw-r--r-- | src/activeqt/shared/qaxtypes.cpp | 6 |
5 files changed, 23 insertions, 34 deletions
diff --git a/src/activeqt/container/qaxbase.cpp b/src/activeqt/container/qaxbase.cpp index 8d9ec32..6732d6c 100644 --- a/src/activeqt/container/qaxbase.cpp +++ b/src/activeqt/container/qaxbase.cpp @@ -4398,11 +4398,12 @@ QVariant QAxBase::asVariant() const else if (d->ptr) qvar.setValue(d->ptr); } else { - cn = cn.mid(cn.lastIndexOf(':') + 1); + cn = cn.mid(cn.lastIndexOf(':') + 1) + '*'; QObject *object = qObject(); - if (QMetaType::type(cn)) - qvar = QVariant(qRegisterMetaType<QObject*>(cn + '*'), &object); -// qvar.setValue(qObject(), cn + '*'); + int typeId = QMetaType::type(cn); + if (!typeId) + typeId = qRegisterMetaType<QObject *>(cn); + qvar = QVariant(typeId, &object); } return qvar; diff --git a/src/activeqt/container/qaxbase.h b/src/activeqt/container/qaxbase.h index 52d2ff1..cb8a7f1 100644 --- a/src/activeqt/container/qaxbase.h +++ b/src/activeqt/container/qaxbase.h @@ -215,18 +215,8 @@ QT_END_NAMESPACE #ifndef Q_COM_METATYPE_DECLARED #define Q_COM_METATYPE_DECLARED -QT_BEGIN_NAMESPACE namespace QtPrivate { -template <> struct IsPointerToTypeDerivedFromQObject<IUnknown*> { - enum { Value = false }; -}; -} QT_END_NAMESPACE - -QT_BEGIN_NAMESPACE namespace QtPrivate { -template <> struct IsPointerToTypeDerivedFromQObject<IDispatch*> { - enum { Value = false }; -}; -} QT_END_NAMESPACE - +Q_DECLARE_OPAQUE_POINTER(IUnknown*) +Q_DECLARE_OPAQUE_POINTER(IDispatch*) Q_DECLARE_METATYPE(IUnknown*) Q_DECLARE_METATYPE(IDispatch*) diff --git a/src/activeqt/control/qaxfactory.h b/src/activeqt/control/qaxfactory.h index 3463fca..e262292 100644 --- a/src/activeqt/control/qaxfactory.h +++ b/src/activeqt/control/qaxfactory.h @@ -299,17 +299,8 @@ QT_END_NAMESPACE #ifndef Q_COM_METATYPE_DECLARED #define Q_COM_METATYPE_DECLARED -QT_BEGIN_NAMESPACE namespace QtPrivate { -template <> struct IsPointerToTypeDerivedFromQObject<IUnknown*> { - enum { Value = false }; -}; -} QT_END_NAMESPACE - -QT_BEGIN_NAMESPACE namespace QtPrivate { -template <> struct IsPointerToTypeDerivedFromQObject<IDispatch*> { - enum { Value = false }; -}; -} QT_END_NAMESPACE +Q_DECLARE_OPAQUE_POINTER(IUnknown*) +Q_DECLARE_OPAQUE_POINTER(IDispatch*) Q_DECLARE_METATYPE(IUnknown*) Q_DECLARE_METATYPE(IDispatch*) diff --git a/src/activeqt/control/qaxserver.cpp b/src/activeqt/control/qaxserver.cpp index d6925fb..06344b6 100644 --- a/src/activeqt/control/qaxserver.cpp +++ b/src/activeqt/control/qaxserver.cpp @@ -90,8 +90,9 @@ QAxFactory *qAxFactory() // register all types with metatype system as pointers QStringList keys(qax_factory->featureList()); for (int i = 0; i < keys.count(); ++i) { - QString key(keys.at(i)); - qRegisterMetaType((key + QLatin1Char('*')).toLatin1(), (void**)0); + QByteArray pointerType = keys.at(i).toLatin1() + '*'; + if (!QMetaType::type(pointerType.constData())) + qRegisterMetaType<void *>(pointerType); } } return qax_factory; @@ -493,8 +494,8 @@ static const char* const type_map[][2] = static QByteArray convertTypes(const QByteArray &qtype, bool *ok) { - qRegisterMetaType("IDispatch*", (void**)0); - qRegisterMetaType("IUnknown*", (void**)0); + qRegisterMetaType<IDispatch *>("IDispatch*"); + qRegisterMetaType<IUnknown *>("IUnknown*"); *ok = false; @@ -1195,10 +1196,12 @@ extern "C" HRESULT __stdcall DumpIDL(const QString &outfile, const QString &ver) QByteArray cleanType = qax_clean_type(*key, mo).toLatin1(); out << "\tcoclass " << cleanType << ';' << endl; subtypes.append(cleanType); - qRegisterMetaType(cleanType, (void**)0); + if (!QMetaType::type(cleanType)) + qRegisterMetaType<void *>(cleanType); cleanType += '*'; subtypes.append(cleanType); - qRegisterMetaType(cleanType, (void**)0); + if (!QMetaType::type(cleanType)) + qRegisterMetaType<void *>(cleanType); } } out << endl; diff --git a/src/activeqt/shared/qaxtypes.cpp b/src/activeqt/shared/qaxtypes.cpp index 52bbf86..566bfb0 100644 --- a/src/activeqt/shared/qaxtypes.cpp +++ b/src/activeqt/shared/qaxtypes.cpp @@ -1111,7 +1111,11 @@ QVariant VARIANTToQVariant(const VARIANT &arg, const QByteArray &typeName, uint if (iface) { QObject *qObj = iface->qObject(); iface->Release(); - var = QVariant(qRegisterMetaType<QObject*>(qObj ? QByteArray(qObj->metaObject()->className()) + '*' : typeName), &qObj); + QByteArray pointerType = qObj ? QByteArray(qObj->metaObject()->className()) + '*' : typeName; + int pointerTypeId = QMetaType::type(pointerType); + if (!pointerTypeId) + pointerTypeId = qRegisterMetaType<QObject *>(pointerType); + var = QVariant(pointerTypeId, &qObj); } else #endif { |