开发者社区> 问答> 正文

关于Qt调用COM组件参数类型不匹配

comic-_-|| 2018-12-13 14:59:44 563

COM组件的函数代码(通过dumpcpp导出的代码):
inline bool Core::ReadSDO(int Index, QVariantList*& Buffer, int Count)
{

bool qax_result;
void *_a[] = {(void*)&qax_result, (void*)&Index, (void*)&Buffer, (void*)&Count};
qt_metacall(QMetaObject::InvokeMetaMethod, 22, _a);
return qax_result;

}

测试代码

Core *core = new Core();
QVariantList*& Buffer = new QVariantList();
core->ReadSDO(1, buffer, 1);

执行后 报错:
QAxBase: Error calling IDispatch member ReadSDO: Type mismatch in parameter 1

个人分析:
该组件通过C# 来使用时,ReadSDO方法的第二个参数是传入一个 short类型的数组,而QVariant是无法转换和使用short类型的,个人认为 这是错误关键点。

2018-12-14
经测试发现,问题不是QVariant与short,而是在于数组,只要是传入数组就会报这个警告。

我自己写了一个测试的COM来传递数组又是可以使用的,这是不是意味着上面说的COM组件对应的函数在Qt无法使用?

提问:
Qt如何改变才能使用到该函数呢?有大神路过,又刚好知道如何解决的,请指点指点

Qt该如何才能正确的传入数组到COM?
Qt调用com(C#): QVariantList 对应 object[]

分享到
取消 提交回答
全部回答(0)

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题