|
今天第一次使用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
|