• 1728阅读
  • 4回复

[提问]QAxBase 遇到VARIANT*参数的问题 [复制链接]

上一主题 下一主题
离线liaoque
 

只看楼主 正序阅读 楼主  发表于: 2020-10-14
关键词: COMQAxBaseVariant
我使用dynamicCall调用com中的函数,函数有VARIANT* 作为函数参数
传参 我尝试了 使用 QVariant& , const QVariant& , const QList<QVariant>& , QList<QVariant>&, const QStringList& , QStringList& , QAxObject* 都得到错误的参数传递。错误如下:
QAxBase: Error calling IDispatch member GetAll: Type mismatch in parameter 0

我的qt代码:
QList<QVariant> PropNames_f,PropTypes_f,PropValues_f;
array_f = customProperty->dynamicCall("GetAll(QVariant&,QVariant&,QVariant&)",PropNames_f,PropTypes_f,PropValues_f);

GetAll在com中的原型:
virtual HRESULT __stdcall GetAll (
/[in,out]/ VARIANT * PropNames,
/[in,out]/ VARIANT * PropTypes,
/[in,out]/ VARIANT * PropValues,
/[out,retval]/ long * NumProps ) = 0;

qt对 com类型的部分映射关系(qt帮助提取):
COM type Qt property in-parameter out-parameter

BSTR QString const QString& QString&
SAFEARRAY(VARIANT) QList<QVariant> const QList<QVariant>& QList<QVariant>&
SAFEARRAY(BYTE) QByteArray const QByteArray& QByteArray&
SAFEARRAY(BSTR) QStringList const QStringList& QStringList&
VARIANT type-dependent const QVariant& QVariant&
IDispatch* QAxObject* QAxBase::asVariant() QAxObject* (return value)
IUnknown* QAxObject* QAxBase::asVariant() QAxObject* (return value)
SCODE, DECIMAL unsupported unsupported unsupported
VARIANT* (Since Qt 4.5) unsupported QVariant& QVariant&

请求帮忙解决。
谢谢!


只看该作者 4楼 发表于: 2021-03-13
com需要的Variant类型的  但dynamicCall不能使用Variant的变量:提示错误no matching member function for to ‘dynamicCall’
本帖提到的人: @XChinux @flyer_2001
离线flyer_2001

只看该作者 3楼 发表于: 2021-03-12
回 【peroylin】 的帖子
【peroylin】:我也遇到相同的问题 怎么解决的啊? (2021-03-12 18:17) 

具体要看要调用的COM接口需要传什么参数,直接传入就可以了。
比如使用QT调用EXCEL,打开文件
workbooks->dynamicCall("Open(QString,QVariant,QVariant)", m_strFileName, 3, true);
需要传入的参数为文件名,类型,最后一个参数忘记了,网上随便找的。

只看该作者 2楼 发表于: 2021-03-12
我也遇到相同的问题 怎么解决的啊?
本帖提到的人: @XChinux @flyer_2001
离线flyer_2001

只看该作者 1楼 发表于: 2020-10-24
QVariant  PropNames_f,PropTypes_f,PropValues_f;
不要用QList<QVariant>
快速回复
限100 字节
 
上一个 下一个