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就可以了。
参见:
3、在Qt中使用ActiveX控件(这篇非常好!)