| 
 | 
 
 
今天第一次使用Qt里的QAxObject调用Com组件接口,发现有一些VARIANT*的参数不知道怎么在Qt里使用。测试的时候我是自己写了一个Com组件demo。ps:看了半天的com编程捣鼓出来的demo....比如有个接口函数如下- STDMETHODIMP CQtTest::AddSubMethod(long sum, VARIANT* oper1, VARIANT* oper2, long* ret)
 - {
 -         // TODO: 在此添加实现代码
 -         *ret = 0;
 -         if(oper1->vt != VT_I4)
 -         {
 -                 ::MessageBox(NULL,L"第一个参数类型错误",L"QtTest",0);
 -         } else if(oper2->vt != VT_I4) {
 -                 ::MessageBox(NULL,L"第二个参数类型错误",L"QtTest",0);
 -         } else {
 -                 oper1->lVal = sum + 1;
 -                 oper2->lVal = sum - 1;
 -                 *ret = 1;
 -         }
 -         return S_OK;
 - }
 
  使用工具看到的原型如下- long AddSubMethod(
 -                 [in] long sum, 
 -                 [in, out] VARIANT* oper1, 
 -                 [in, out] VARIANT* oper2);
 
  根据Qt文档里的说法,VARIANT* 在Qt里对应的数据类型为 QVariant&。所以我使用dynamicCall调用如下:- int sum = 5;
 -     int x = 0, y = 0;
 -     QVariant v_x, v_y;
 -     v_x.setValue(x); v_y.setValue(y);
 -     int ret = obj.dynamicCall("AddSubMethod(long,QVariant&,QVariant&)", sum, v_x, v_y).toInt();
 -     x = (1 == ret ? v_x.toInt() : -1);
 -     y = (1 == ret ? v_y.toInt() : -1);
 
  捣鼓了很多传参形式,发现不是参数类型不正确就是两个传出参数不正确。不知道有没有朋友使用Qt调用过Com组件的,麻烦指点一下 附件包含一个com组件demo工程(VS2012的),一个Release版的DLL,以及测试用的Qt工程。详细的请看readme.txt  project.rar (36 K) 下载次数:9  
 
 
 |