• 14776阅读
  • 7回复

qt程序调用COM组件 [复制链接]

上一主题 下一主题
离线0519cc
 

只看楼主 倒序阅读 楼主  发表于: 2015-02-16
我以前是一直使用MFC开发的,前一阵偶尔发现了QT,于是一下爱上了QT。
但我在学习QT的过程中,遇到了一个难题,就是【使用qt调用COM组件】
网上看了好久,都没有找到我想要的方法。具体问题如下:
===========================================================================
我使用VC编写了一个COM组件(使用VC测试过,没有问题),该组件比较简单,里面就一个方法:Add(int,int),
还有一个连接点返回事件 Result(int)————返回Add函数结果。
具体的请看附件,请问论坛里的大神、大师,能否指点我一下,
我怎么才能【调用COM组件里的Add方法,同时可以收到COM组件发过来的Result事件】,拜托了!
附件: com.rar (23 K) 下载次数:62
离线roywillow

只看该作者 1楼 发表于: 2015-02-17
查看一下QAxObject和相关的文档,一般是调用dynamicCall之类的,自己慢慢摸索吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线0519cc

只看该作者 2楼 发表于: 2015-02-17
dynamicCall,queryInterface等都试过了,都不行,摸索3天了
使用下面代码导出的的HTML中,竟然只有 void Result(int nVal)函数,而没有Add函数啊,why???
    QString doc = object.generateDocumentation();    QFile outFile("./debuglog.html");    outFile.open(QIODevice::WriteOnly|QIODevice::Append);    QTextStream ts(&outFile);    ts<<doc<<endl;
附件: debuglog.rar (4 K) 下载次数:15
离线0519cc

只看该作者 3楼 发表于: 2015-02-17
    QAxWidget object("{D6717E67-F645-49CA-A534-2763C77C6111}");      QVariantList params0;    params0 << QVariant(1);    params0 << QVariant(2);    object.dynamicCall("Add(int,int)",params0);
执行结果是:QAxBase::dynamicCallHelper: Add(int,int): No such property in {D6717E67-F645-49CA-A534-2763C77C6111} [unknown]
离线seahouse

只看该作者 4楼 发表于: 2015-03-08
generateDocumentation 是可以导出接口名称的。
你确定COM组件中有Add函数吗?
我的一个调用COM组件程序:
  1. _rtxObject = new QAxObject();
  2.     if (!_rtxObject->setControl("{79210E58-99EB-45D0-8890-763EFEAA143F}"))
  3.     {
  4.         qDebug() << tr("加载RTX失败。");
  5.         return;
  6.     }
  7.     QVariantList params;
  8.     params << receiver << tr("系统消息") << 0 << msg;  
  9.     _rtxObject->dynamicCall("SendNotify(QString, QString, int, QString)", params);

离线彩阳

只看该作者 5楼 发表于: 2015-03-09
GUID是不是要再确定一下?
上海Qt开发联盟,热忱地欢迎你的加入!
离线wxlzwd

只看该作者 6楼 发表于: 2015-03-17
请问楼主的问题解决了吗?
离线liudianwu

只看该作者 7楼 发表于: 2015-03-23
目测应该是编写的COM组件有问题,可以试试用C#调用你写的COM组件看下行不行,不行那就说明COM组件有问题,你用VC调用你用VC写的COM组件,未必使用的是完全的COM组件调用方法。
欢迎关注微信公众号:Qt实战/Qt入门和进阶(各种开源作品、经验整理、项目实战技巧,专注Qt/C++软件开发,视频监控、物联网、工业控制、嵌入式软件、国产化系统应用软件开发) QQ:517216493  WX:feiyangqingyun  QQ群:751439350
快速回复
限100 字节
 
上一个 下一个