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="width: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>
Qt create 如何构建 ActiveX 控件?的更多相关文章
- Qt 环境下的activex控件编程-------1
本人第一次接触这种activeX控件的东西,参考了网上很多的教程,终于耗时三个多小时初步理解并编写了一个小demo,现在分享给大家,希望大家少走弯路.步骤如下: 1>像平常创建项目一样创建一个d ...
- 在Qt中使用ActiveX控件
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QA ...
- Qt编写activex控件在网页中运行
qt能够实现的东西非常多,还可以写activex控件直接在网页中运行.参照qtdemo下的例子即可. 方案一:可执行文件下载:https://pan.baidu.com/s/14ge9ix2Ny0x7 ...
- Qt中使用ActiveX控件
(转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...
- c# 开发ActiveX控件,添加事件,QT调用事件
c# 开发 ActiveX 的过程参考我的另一篇文章 : https://www.cnblogs.com/baqifanye/p/10414004.html 本篇讲如何 在C# 开发的ActiveX ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
- ActiveX控件(ATL篇)
目录 第1章 VC++6.0创建 2 1.1 目标 2 1.2 创建项目 2 1.3 增加COM类 4 1.4 属性 7 1.5 事件 8 1.6 实现连接点 ...
- ActiveX控件
什么是ActiveX控件:一个进程内服务器,支持多种的COM接口.(可以理解为,一个COM接口是一个纯抽象基类,你实现了它,并且它支持自注册,就是一个ActiveX控件了)可以把ActiveX控件看做 ...
- COM组件开发实践(八)---多线程ActiveX控件和自动调整ActiveX控件大小(下)
源代码下载:MyActiveX20081229.rar 声明:本文代码基于CodeProject的文章<A Complete ActiveX Web Control Tutorial>修改 ...
随机推荐
- whoops php调试库
Whoops 适用于PHP环境的错误捕获与调试PHP库: whoops非常容易使用,它提供stackbased错误捕获及超美观的错误查看 测试效果如下 安装步骤(composer安装) 安装完成之后在 ...
- common-logging源码解析
OK,现在我们来研究下common-logging的源码.这篇博客有参照上善若水的博客,感谢他的无私分享. 先来随便扯点吧,貌似所有这些流行的Logging框架都和Log4J多少有点关系(不太确定Co ...
- Linux指令--wget
Linux系统中的wget是一个下载文件的工具,它用在命令行下.对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器.wget支持HTTP,HTTPS和FTP协 ...
- 深入理解Java虚拟机读书笔记(一)- java内存区域和垃圾收集
jvm内存模型如下图 垃圾回收: 方法区: 这部分的垃圾回收性价比低,一般不要求回收,暂认为是永久代 heap:新生代和永久代之分.永久代主要回收废弃常量和无用的类. 垃圾回收算法: 1. 标记-清除 ...
- php之插入排序
<?phpfunction insertSort($arr) { //插入排序 $len = count($arr); for($i=1;$i<$len;$i++){ ...
- lodash源码分析之baseFindIndex中的运算符优先级
我悟出权力本来就是不讲理的--蟑螂就是海米:也悟出要造反,内心必须强大到足以承受任何后果才行. --北岛<城门开> 本文为读 lodash 源码的第十篇,后续文章会更新到这个仓库中,欢迎 ...
- 浅谈PHP异常处理
1.PHP中异常的独特性 PHP中的异常的独特性,即PHP中的异常不同于主流语言C++.java中的异常.在Java中,异常是唯一的错误报告方式,而在PHP中却不是这样,而是把所有不正常的情况都视作了 ...
- Jmeter_打印当前时间戳&打印偏移时间戳
Jmeter中提供了一种函数,可以打印时间戳,如下图 年: yyyy 月:MM 日:dd 时: HH 分: mm 秒:ss 关于时间戳的格式,可以自由组合定义,这里我写成这样 yyyy-MM-dd H ...
- Java高并发的常见应对方案
Java高并发的常见应对方案 一.关于并发我们说的高并发是什么? 在互联网时代,高并发,通常是指,在某个时间点,有很多个访问同时到来. 高并发,通常关心的系统指标与业务指标? QPS:每秒钟查询量,广 ...
- ubuntu 新手入门第一天
在虚拟机上安装好linux之后,当前版本 ubuntu-16.04.3-desktop-amd64.iso 1. 设置root用户名和密码 sudo passwd 然后输入两次密码 2. 设置软件源 ...