/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the documentation of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:FDL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Free Documentation License Usage
** Alternatively, this file may be used under the terms of the GNU Free
** Documentation License version 1.3 as published by the Free Software
** Foundation and appearing in the file included in the packaging of
** this file. Please review the following information to ensure
** the GNU Free Documentation License version 1.3 requirements
** will be met: https://www.gnu.org/licenses/fdl-1.3.html.
** $QT_END_LICENSE$
**
****************************************************************************/
/*!
    \module QAxContainer
    \title QAxContainer C++ Classes
    \ingroup modules
    \qtvariable axcontainer

    \brief The QAxContainer module is a Windows-only extension for
    accessing ActiveX controls and COM objects.

    QAxContainer is part of the \l{Active Qt} module.
    The \l{Using ActiveX controls and COM in Qt} page contains information about
    containers for ActiveX controls.
*/

/*!
    \page activeqt-container.html
    \title Using ActiveX controls and COM in Qt
    \ingroup qt-activex

    \brief A Windows-only extension for accessing ActiveX controls and
    COM objects.

    The QAxContainer module is part of the \l ActiveQt framework. It
    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, and a set of \l{Tools for ActiveQt}{tools}
    makes it easy to access COM objects programmatically.

    The module consists of six classes
    \list 1
    \li QAxBase is an abstract class that provides an API to initialize
       and access a COM object or ActiveX control.
    \li QAxObject provides a QObject that wraps a COM object.
    \li QAxWidget is a QWidget that wraps an ActiveX control.
    \li QAxScriptManager, QAxScript and QAxScriptEngine provide an
       interface to the Windows Script Host.
    \endlist

    Some \l{ActiveQt Examples}{example applications} that use
    standard ActiveX controls to provide high-level user interface
    functionality are provided.

    \sa {ActiveQt Framework}

    Topics:

    \tableofcontents

    \section1 Using the Library

    To build Qt applications that can host COM objects and ActiveX controls
    link the application against the QAxContainer module by adding

    \snippet doc_src_qaxcontainer.pro 0

    to your application's \c .pro file.

    \section2 Distributing QAxContainer Applications

    The 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.

    \section1 Instantiating COM Objects

    To 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.

    \section2 Typical Error Messages

    ActiveQt 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).

    \section3 Requested control could not be instantiated

    The 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, pass the license key to QAxBase::setControl
    as documented.

    \section1 Accessing the Object API

    ActiveQt provides a Qt API to the COM object, and replaces COM
    datatypes with Qt equivalents.

    There are four ways to call APIs on the COM object:

    \list
    \li Generating a C++ namespace
    \li Call-by-name
    \li Through a script engine
    \li Using the native COM interfaces
    \endlist

    \section2 Generating a C++ Namespace

    To generate a C++ namespace for the type library you want to access,
    use the \l dumpcpp tool. Run this tool manually on the type library you
    want to use, or integrate it into the build system by adding the type
    libraries to the \c TYPELIBS variable in your application's \c .pro file:

    \snippet doc_src_qaxcontainer.pro 1

    Note that \l dumpcpp might not be able to expose all APIs in the type
    library.

    Include the resulting header file in your code to access the
    object APIs through the generated C++ classes. See the
    \l{activeqt/qutlook}{Qutlook} example for more information.

    \section2 Call-by-Name

    Use QAxBase::dynamicCall() and QAxBase::querySubObject() as well as
    the QObject::setProperty() and QObject::property() APIs to call the
    methods and properties of the COM object through their name. Use the
    \l dumpdoc tool to get the documentation of the Qt API for any COM
    object and its subobjects; note that not all of the COM object's APIs
    might be available.

    See the \l{activeqt/mediaplayer}{Media Player} example for more information.

    \section2 Calling Function Through a Script Engine

    A Qt application can host any ActiveScript engine installed on the system.
    The script engine can then run script code that accesses the COM objects.

    To instantiate a script engine, use QAxScriptManager::addObject() to
    register the COM objects you want to access from script, and
    QAxScriptManager::load() to load the script code into the engine. Then
    call the script functions using QAxScriptManager::call() or
    QAxScript::call().

    Which APIs of the COM object are available through scripting depends on
    the script language used.

    The \l{testcon - An ActiveX Test Container (ActiveQt)}{ActiveX Test Container}
    demonstrates loading of script files.

    \section2 Calling a Function Using the Native COM Interfaces

    To call functions of the COM object that can not be accessed via any
    of the above methods it is possible to request the COM interface directly
    using QAxBase::queryInterface(). To get a C++ definition of the respective
    interface classes use the \c #import directive with the type library
    provided with the control; see your compiler manual for details.

    \section2 Typical Error Messages

    ActiveQt 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).

    \section3 QAxBase::internalInvoke: No such method

    A QAxBase::dynamicCall() failed - the function prototype did not
    match any function available in the object's API.

    \section3 Error calling IDispatch member: Non-optional parameter missing

    A QAxBase::dynamicCall() failed - the function prototype was correct,
    but too few parameters were provided.

    \section3 Error calling IDispatch member: Type mismatch in parameter n

    A QAxBase::dynamicCall() failed - the function prototype was correct,
    but the parameter at index \c n was of the wrong type and could
    not be coerced to the correct type.

    \section3 QAxScriptManager::call(): No script provides this function

    You 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.
*/
