zoukankan      html  css  js  c++  java
  • Qt create 如何构建 ActiveX 控件?

    ActiveX.pro

    #-------------------------------------------------
    #
    # Project created by QtCreator 2018-01-19T09:37:39
    #
    #-------------------------------------------------
    # Qt shared
    QT_CI_JENKINS_HOME=$$(JENKINS_HOME)
    !isEmpty(QT_CI_JENKINS_HOME) {
        message("Qt CI environment detected, suppressing example registration")
        CONFIG += qaxserver_no_postlink
    }
    
    TEMPLATE = app
    TARGET   = ActiveX
    CONFIG += warn_off
    QT += core widgets axserver
    SOURCES += 
            main.cpp 
            activex.cpp 
    
    HEADERS += 
            activex.h
    
    FORMS += 
            activex.ui
    
    RC_FILE  = ActiveX.rc
    DEF_FILE = ActiveX.def
    
    

    activex.h

    #ifndef ACTIVEX_H
    #define ACTIVEX_H
    
    #include <QWidget>
    #include <QtCore>
    #include <ActiveQt>
    
    
    //# 设置内存执行编码 UTF-8
    #ifdef Q_OS_WIN
    #pragma execution_character_set("UTF-8")
    #endif
    
    // ObjectSafety
    //# 控件安全标记类
    #include <QAxAggregated>
    #include <objsafe.h>
    #include <QUuid>
    class ObjectSafety : public QAxAggregated, public IObjectSafety
    {
    public:
        ObjectSafety(){
        }
        QAXAGG_IUNKNOWN;
        long queryInterface(const QUuid &iid, void **iface)
        {
            *iface = NULL;
            if (iid == IID_IObjectSafety)
            {
                *iface = (IObjectSafety*)this;
            }
            else
            {
                return E_NOINTERFACE;
            }
            AddRef();
            return S_OK;
        }
        HRESULT WINAPI GetInterfaceSafetyOptions(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions)
        {
            *pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACESAFE_FOR_UNTRUSTED_CALLER;
            *pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA | INTERFACESAFE_FOR_UNTRUSTED_CALLER;
            return S_OK;
        }
        HRESULT WINAPI SetInterfaceSafetyOptions(REFIID riid, DWORD pdwSupportedOptions, DWORD pdwEnabledOptions)
        {
            return S_OK;
        }
    };
    //End ObjectSafety
    
    namespace Ui {
    class ActiveX;
    }
    
    class ActiveX : public QWidget,public QAxBindable
    {
        Q_OBJECT
        Q_CLASSINFO("ClassID",     "{DF16845C-92CD-4AAB-A982-EB9840E74669}")
        Q_CLASSINFO("InterfaceID", "{616F620B-91C5-4410-A74E-6B81C76FFFE0}")
        Q_CLASSINFO("EventsID",    "{E1816BBA-BF5D-4A31-9855-D6BA432055FF}")
    public:
        explicit ActiveX(QWidget *parent = 0);
        ~ActiveX();
    public Q_SLOTS:
        QString Version();
    private:
        Ui::ActiveX *ui;
        QAxAggregated* createAggregate()
        {
            return new ObjectSafety;
        }
    };
    
    #endif // ACTIVEX_H
    
    

    activex.cpp

    #include "activex.h"
    #include "ui_activex.h"
    
    ActiveX::ActiveX(QWidget *parent) :
        QWidget(parent),
        ui(new Ui::ActiveX)
    {
        ui->setupUi(this);
    }
    
    ActiveX::~ActiveX()
    {
        delete ui;
    }
    
    QString ActiveX::Version()
    {
        return QString("ActiveX 1.0.0");
    }
    
    

    main.cpp

    #include "activex.h"
    #include <QApplication>
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        if (!QAxFactory::isServer()) {
            ActiveX w;
            w.show();
            return app.exec();
        }
        return app.exec();
    }
    
    //! [1]
    QAXFACTORY_BEGIN("{EC08F8FC-2754-47AB-8EFE-56A54057F34E}", /* type library ID */ "{A095BA0C-224F-4933-A458-2DD7F6B85D8F}") /* application ID */
        QAXCLASS(ActiveX)
    QAXFACTORY_END()
    //! [1]
    
    

    ActiveX.def

    EXPORTS
        DllCanUnloadNow      PRIVATE
        DllGetClassObject    PRIVATE
        DllRegisterServer    PRIVATE
        DllUnregisterServer  PRIVATE
        DumpIDL              PRIVATE
    

    `index.html'

    <html lang="en">
    <head>
    <meta name="GENERATOR" content="Microsoft Visual Studio">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>ActiveXCameraGui</title>
    </head>
    <body>
        <object id="ActiveQtServer" style="256px;height:256px;" classid="CLSID:DF16845C-92CD-4AAB-A982-EB9840E74669">
            <param name="Version" value="BTC">
        </object>
        <button onclick="alert(ActiveQtServer.Version())">Version</button>
    
    <script>
        window.onload = function () {
            //var ret = ActiveQtServer.Version;
            //alert(ret);//打印 初始化版本信息
            //alert("Hello World!");//打印 Hello World!
        };
    </script>
    </body>
    </html>
    
    
  • 相关阅读:
    table中tr间距的设定table合并单元格 colspan(跨列)和rowspan(跨行)
    使用jquery触发a标签跳转
    真正的让iframe自适应高度 兼容多种浏览器随着窗口大小改变
    html5 data属性的使用
    jQuery取得select选择的文本与值
    jqueryui教程
    密码复杂度
    zabbix配置微信报警
    tomcat配置域名访问
    阿里云ecs禁止ping,禁止telnet
  • 原文地址:https://www.cnblogs.com/cheungxiongwei/p/8316242.html
Copyright © 2011-2022 走看看