The QAxContainer Module
IntroductionThe QAxContainer module provides a library implementing a QWidget subclass, QAxWidget, that acts as a container for ActiveX controls, and a QObject subclass, QAxObject, that can be used to easily access non-visual COM objects. Scripting COM objects embedded using these classes is possible through the QAxScript, QAxScriptManager and QAxScriptEngine classes. This module is part of the ActiveQt framework. (To make an application into an ActiveX server see the QAxServer module.) The module consists of six classes
Some example applications that use standard ActiveX controls to provide high level user interface functionality are provided.
Building the libraryIn the activeqt directory (usually QTDIR/extensions/activeqt) enter the container subdirectory and run qmake to generate the makefile, and use the make tool (nmake for VC++, make for Borland) to build the library. The library qaxcontainer.lib will be linked into QTDIR/lib. If you have a shared configuration of Qt enter the plugin subdirectory and run qmake and your make tool to build a plugin that integrates the QAxWidget class into Qt Designer.
Using the libraryTo build Qt applications that can host COM objects and ActiveX controls link the application against the QAxContainer module by adding
LIBS += qaxcontainer.lib to the application's .pro file.
Distributing QAxContainer applicationsThe QAxContainer library is static, so there is no need to redistribute any additional files when using this module. Note however that the ActiveX server binaries you are using might not be installed on the target system, so you have to ship them with your package and register them during the installation process of your application.
Instantiating COM objectsTo instantiate a COM object use the QAxBase::setControl() API, or pass the name of the object directly into the constructor of the QAxBase subclass you are using. The control can be specified in a variety of formats, but the fastest and most powerful format is to use the class ID (CLSID) of the object directly. The class ID can be prepended with information about a remote machine that the object should run on, and can include a license key for licensed controls.
Accessing the object APIActiveQt provides a Qt API to the COM object, and replaces COM datatypes with Qt equivalents. Use the dumpdoc tool to get the documentation of the Qt API for any COM object and it's subobjects. See the QAxWidget and QAxObject API documentation about how to use this class to use ActiveX controls and COM objects in Qt applications. To access the COM object with scripting languages use the QAxScript class. To call functions of the COM object that can not be accessed via ActiveQt it is possible to request the COM interface directly using QAxBase::queryInterface(). To get a C++ definition of the respective interface classes use the #import directive with the type library provided with the control.
Typical error messagesActiveQt prints error messages to the debug output when it encounters error situations at runtime. Usually you must run your program in the debugger to see these messages (e.g. in Visual Studio's Debug output).
Requested control could not be instantiatedThe control requested in QAxBase::setControl() is not installed on this system, or is not accessible for the current user. The control might require administrator rights, or a license key. If the control is licensed, reimplement initialize() and use the COM APIs to call the IClassFactory2 interface functions.
QAxBase::internalInvoke: No such methodA dynamicCall() failed - the function prototype did not match any function available in the object's API.
Error calling IDispatch member: Non-optional parameter missingA dynamicCall() failed - the function prototype was correct, but too few parameters were provided.
Error calling IDispatch member: Type mismatch in parameter nA dynamicCall() failed - the function prototype was correct, but the paramter at index n was of the wrong type and could not be coerced to the correct type.
QAxScriptManager::call(): No script provides this functionYou try to call a function that is provided through an engine that doesn't provide introspection (ie. ActivePython or ActivePerl). You need to call the function directly on the respective QAxScript object. |
Publicité
Best OfActualités les plus luesSemaine
Mois
Année
Le Qt Developer Network au hasardExtension de Qt WebKitLe Qt Developer Network est un réseau de développeurs Qt anglophone, où ils peuvent partager leur expérience sur le framework. Lire l'article.
CommunautéRessources
Liens utilesContact
Qt dans le magazine |
Cette page est une traduction d'une page de la documentation de Qt, écrite par Nokia Corporation and/or its subsidiary(-ies). Les éventuels problèmes résultant d'une mauvaise traduction ne sont pas imputables à Nokia. | Qt 3.3 | |
Copyright © 2012 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon, vous encourez selon la loi jusqu'à 3 ans de prison et jusqu'à 300 000 E de dommages et intérêts. Cette page est déposée à la SACD. | ||
Vous avez déniché une erreur ? Un bug ? Une redirection cassée ? Ou tout autre problème, quel qu'il soit ? Ou bien vous désirez participer à ce projet de traduction ? N'hésitez pas à nous contacter ou par MP ! |
Copyright © 2000-2012 - www.developpez.com