QAxObject调用Com组件的参数问题

gdutlison 2014-07-24 02:17:21
今天第一次使用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
没找到上传附件的地方,贴个外链吧。
http://gdutlison.qiniudn.com/project.rar
...全文
466 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdutlison 2014-08-03
  • 打赏
  • 举报
回复
引用 4 楼 besterector 的回复:
[quote=引用 3 楼 gdutlison 的回复:] [quote=引用 2 楼 besterector 的回复:] 或许 不是 参数的问题。 com 的标准引用函数 是queryInterface。 楼主不妨试试。 我一年多没用Active Qt了,不敢班门弄斧。
因为之前对queryInterface用法不太熟,现在在尝试这个[/quote] dynamicCall 和 queryInterface 应用场景不同,这个非常重要。楼主别被我误导去钻研 queryInterface。 现在Qt 很多东西忘了,不然肯定帮你调程序~[/quote] 哎,都这么久过去了还没解决,也没见多几个人来回复下的。。
gdutlison 2014-07-30
  • 打赏
  • 举报
回复
没人这样用过么
gdutlison 2014-07-25
  • 打赏
  • 举报
回复
再顶,坐等高手。
gdutlison 2014-07-24
  • 打赏
  • 举报
回复
顶一下
besterector 2014-07-24
  • 打赏
  • 举报
回复
引用 3 楼 gdutlison 的回复:
[quote=引用 2 楼 besterector 的回复:] 或许 不是 参数的问题。 com 的标准引用函数 是queryInterface。 楼主不妨试试。 我一年多没用Active Qt了,不敢班门弄斧。
因为之前对queryInterface用法不太熟,现在在尝试这个[/quote] dynamicCall 和 queryInterface 应用场景不同,这个非常重要。楼主别被我误导去钻研 queryInterface。 现在Qt 很多东西忘了,不然肯定帮你调程序~
gdutlison 2014-07-24
  • 打赏
  • 举报
回复
引用 2 楼 besterector 的回复:
或许 不是 参数的问题。 com 的标准引用函数 是queryInterface。 楼主不妨试试。 我一年多没用Active Qt了,不敢班门弄斧。
因为之前对queryInterface用法不太熟,现在在尝试这个
besterector 2014-07-24
  • 打赏
  • 举报
回复
或许 不是 参数的问题。 com 的标准引用函数 是queryInterface。 楼主不妨试试。 我一年多没用Active Qt了,不敢班门弄斧。

16,216

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧