• 3746阅读
  • 0回复

[讨论]QAxObject调用Com组件的参数问题 [复制链接]

上一主题 下一主题
离线imlison
 

只看楼主 倒序阅读 楼主  发表于: 2014-08-03
今天第一次使用Qt里的QAxObject调用Com组件接口,发现有一些VARIANT*的参数不知道怎么在Qt里使用。
测试的时候我是自己写了一个Com组件demo。ps:看了半天的com编程捣鼓出来的demo....

比如有个接口函数如下
  1. STDMETHODIMP CQtTest::AddSubMethod(long sum, VARIANT* oper1, VARIANT* oper2, long* ret)
  2. {
  3.         // TODO: 在此添加实现代码
  4.         *ret = 0;
  5.         if(oper1->vt != VT_I4)
  6.         {
  7.                 ::MessageBox(NULL,L"第一个参数类型错误",L"QtTest",0);
  8.         } else if(oper2->vt != VT_I4) {
  9.                 ::MessageBox(NULL,L"第二个参数类型错误",L"QtTest",0);
  10.         } else {
  11.                 oper1->lVal = sum + 1;
  12.                 oper2->lVal = sum - 1;
  13.                 *ret = 1;
  14.         }
  15.         return S_OK;
  16. }

使用工具看到的原型如下
  1. long AddSubMethod(
  2.                 [in] long sum,
  3.                 [in, out] VARIANT* oper1,
  4.                 [in, out] VARIANT* oper2);

根据Qt文档里的说法,VARIANT* 在Qt里对应的数据类型为 QVariant&。所以我使用dynamicCall调用如下:
  1. int sum = 5;
  2.     int x = 0, y = 0;
  3.     QVariant v_x, v_y;
  4.     v_x.setValue(x); v_y.setValue(y);
  5.     int ret = obj.dynamicCall("AddSubMethod(long,QVariant&,QVariant&)", sum, v_x, v_y).toInt();
  6.     x = (1 == ret ? v_x.toInt() : -1);
  7.     y = (1 == ret ? v_y.toInt() : -1);

捣鼓了很多传参形式,发现不是参数类型不正确就是两个传出参数不正确。
不知道有没有朋友使用Qt调用过Com组件的,麻烦指点一下
附件包含一个com组件demo工程(VS2012的),一个Release版的DLL,以及测试用的Qt工程。详细的请看readme.txt
project.rar (36 K) 下载次数:9
快速回复
限100 字节
 
上一个 下一个