在Qt中使用ActiveX控件(使用VS2008开发)

时间:2023-01-22 10:39:15

ActiveX控件是Microsoft Windows系统上特有的控件,Qt中提供QAxContainer和QAxServer组件(lib文件)支持ActiveX控件,前者允许我们使用已有的ActiveX控件,后者允许我们使用Qt编写ActiveX控件。本文只讲如何在Qt中使用已有的ActiveX控件。


一、ActiveX控件在磁盘的什么地方

使用网页下载cab包安装的控件可以在 C:\WINDOWS\Downloaded Program Files 文件夹下查看控件列表,通过文件属性可以查看ActiveX控件的GUID和文件路径。

这个文件夹里的东西不能复制,不能剪切,不能粘贴,主要看这些ActiveX控件的属性里的UUID,这个ID就像这个控件的身份证一样,不会跟别的控件重复,不同计算机上的同一控件的UUID相同(没打错,是相同)。

如果你觉得不过瘾,还可以通过注册表看这个控件的配置文件信息和dll文件信息:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Code Store Database\Distribution Units\ ActiveX_GUID 
DownloadInformation子键:保存了cab包URL和cab包inf文件路径。 
Contains\Files子键:保存控件程序文件路径


注意,inf文件里记录着这个控件的dll文件所在的路径,一个控件可能会有多个dll,但每个dll文件都对应一个UUID,你只需要按照inf文件里的记录,找到你感兴趣的控件的UUID对应的dll文件就行了。


二、如何使用ActiveX控件的dll文件

你不需要在程序里加载ActiveX控件对应的dll文件,因为ActiveX控件在安装的时候已经在系统中注册过了,即将dll与UUID的对应关系告诉操作系统了,所以,你在代码中只需要使用UUID就行了,那么,控件的dll文件有什么用呢?除了运行控件的时候要用它以外,它还可以告诉你,这个控件支持那些操作:它有哪些函数可供你调用!

打开Visual Studio 2008的命令提示,切换到控件对应的dll所在目录,执行:

dumpcpp XXX.dll,其中XXX.dll就是那个dll的名字,然后会在dll的目录里生成一个h文件,一个cpp文件,那个h文件会告诉你,这个控件支持哪些操作:可以调用哪些函数。


三、如何调用ActiveX控件的函数

#include <QApplication>
#include <QtGui>
#include <QAxWidget>
int main(int argc, char *argv[]){
QApplication a(argc, argv);

QAxWidget *flash = new QAxWidget(0,0);
flash->resize(500,80);
flash->setControl(QString::fromUtf8("{d27cdb6e-ae6d-11cf-96b8-444553540000}"));
flash->dynamicCall("LoadMovie(long,string)",0,"c:/1.swf");
flash->show();

return a.exec();
}

使用dynamicCall就可以了。


参见:

1、如何删除ActiveX控件

2、dumpcpp生成的h和cpp文件的问题

3、在Qt中使用ActiveX控件(这篇非常好!)