• 13953阅读
  • 10回复

Qt ActiveX的问题 [复制链接]

上一主题 下一主题
离线sbtree
 
只看楼主 倒序阅读 楼主  发表于: 2010-10-27
— 本帖被 XChinux 执行加亮操作(2010-10-29) —
最近用Qt和VC2008开发了一个进程外ActiveX控件,本地编译调试,运行良好,并用vba测试,一切正常。把它拷贝到了其他机器上运行,出问题了。问题描述如下:

首先相关的文件,包括编译生成的exe文件,QtCore,QtGui,VC运行期等动态连接库,拷贝到了另外的机器上,并利用qt提供的idc把exe文件注册到了注册表中(这里也可以直接运行exe文件,带 /regserver参数,进行注册,因为是进程外控件),显示注册成功,查看注册表项,也的却找到了注册的相关信息。然后用vba写了一小段程序测试,创建实例时报错,提示指定的模块找不到。于是用depends查了一下exe文件,依赖文件一个不缺。这就奇怪了,是什么原因造成无法创建实例呢?纠结中。。。。。。恳请达人指点!!!!

另外分别使用qt的静态和动态库编译该控件,本地运行都是没有问题的,在别的机器上就是找不到指定模块。
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 1楼 发表于: 2010-10-27
run-time error '-2147024770 (8007007e)'
windows 7 + VC++2008 + Qt4.5.2
离线sbtree
只看该作者 2楼 发表于: 2010-10-28
今天在目标机器上进行编译,发现成功了。
再次搜索注册表,发现曾经注册过一个进程内控件,使用了相同的CLSID,估计就是这个原因吧。都怪自己没有创新创建新的GUID,引以为训吧!
又安装了一个虚拟机,使用之前的注册过程,发现在虚拟机上也能用了。就这样结帖吧。
windows 7 + VC++2008 + Qt4.5.2
离线mxly

只看该作者 3楼 发表于: 2010-10-31
大哥能否指教下Qt和VC2008如何开发ActiveX控件,谢谢!
我的邮件cumtmxly@163.com
离线sbtree
只看该作者 4楼 发表于: 2010-11-01
对于用qt进行ActiveX控件开发,我也是一知半解,不过一个最简单的方法就是在在qt的例子基础上改一改,不要忘了使用自己新建的GUID,另外就是通过向导建立qt activex server项目,其余的事情跟写普通的qt程序没什么区别。关于activex的很多细节都由qt的几个宏包装起来了,外部也看不到什么东西,要想深入了解,就要研究COM了,网上有很多相关的教程,自己google一下吧!
windows 7 + VC++2008 + Qt4.5.2
离线linwalker
只看该作者 5楼 发表于: 2010-11-03
我尝试example中的simpleax,编译通过,运行simpleax.exe程序也没报什么错误,但在网页中调用总失败,不知道为何原因。
离线sbtree
只看该作者 6楼 发表于: 2010-11-03
引用第5楼linwalker于2010-11-03 16:19发表的  :
我尝试example中的simpleax,编译通过,运行simpleax.exe程序也没报什么错误,但在网页中调用总失败,不知道为何原因。

你是如何调用的?不妨贴点源码或者把问题描述的再清楚一点,比如是创建实例的时候失败了,还是调用某个属性或方法失败了。
windows 7 + VC++2008 + Qt4.5.2
离线linwalker
只看该作者 7楼 发表于: 2010-11-09
回 6楼(sbtree) 的帖子
我是按照帮助文档中的方法操作activex的,html中调用simpleax的代码如下:
<object ID="QSimpleAX" CLASSID="CLSID:DF16845C-92CD-4AAB-A982-EB9840E74669">
     <PARAM NAME="text" VALUE="A simple control" />
     <PARAM NAME="value" VALUE="1" />
[Object not available! Did you forget to build and register the server?]
</object>
<FORM>
     <INPUT TYPE="BUTTON" VALUE="About..." onClick="QSimpleAX.about()" />
</FORM>
结果,提示找不到对象的属性或方法,是在:
<INPUT TYPE="BUTTON" VALUE="About..." onClick="QSimpleAX.about()" />
这一行出错的。如果你QT Activex成功了,能否提供一个简单的例子,在下不胜感激。
离线sbtree
只看该作者 8楼 发表于: 2010-11-09
Re:回 6楼(sbtree) 的帖子
引用第7楼linwalker于2010-11-09 10:55发表的 回 6楼(sbtree) 的帖子 :
我是按照帮助文档中的方法操作activex的,html中调用simpleax的代码如下:
<object ID="QSimpleAX" CLASSID="CLSID:DF16845C-92CD-4AAB-A982-EB9840E74669">
     <PARAM NAME="text" VALUE="A simple control" />
     <PARAM NAME="value" VALUE="1" />
[Object not available! Did you forget to build and register the server?]
.......

你的问题看上去像是控件没有注册成功,查看一下本地的注册表,看看能不能找到该控件注册的信息
windows 7 + VC++2008 + Qt4.5.2
离线spenny83feng

只看该作者 9楼 发表于: 2010-11-29
请教一下,qt是不是商业版的才允许调用activex 控件啊?
离线sbtree
只看该作者 10楼 发表于: 2010-11-29
我一直使用商业版的。不过qt本身开源,利用源代码应该可以编译出支持activex的库文件,你仔细看看qt的编译参数吧
windows 7 + VC++2008 + Qt4.5.2
快速回复
限100 字节
 
上一个 下一个