关于Qt调用COM组件参数类型不匹配-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

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

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

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[]

C#
分享到
取消 提交回答
全部回答(1)
  • 被纵养的懒猫
    2019-10-17 17:53:35
    使用import引入的方式比较简单,用智能指针来调用 #import "C:\a.dll" no_namespace  // 不知道名字空间的话必须加上no_namespace//在应用程序类的InitInstance函数添加:   CLSID clsid;   CLSIDFromProgID(OLESTR("a.GetRes"),&clsid);   CComPtr<IGetRes> pGetRes;        //智能指针   pGetRes.CoCreateInstance(clsid);   pGetRes->Hello();                   // 调用接口   // 在程序结束,例如Onclose处释放      pGetRes.Release();                CoUninitialize();
    

    答案来源于网络

    0 0

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

推荐文章
相似问题