云栖问答

找不到答案?去提问题

函数 测试 c# Core void QT index type 数组 com 2018-12-13 14:59:44

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

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个回答

0
GO