【发布时间】:2013-07-09 20:33:18
【问题描述】:
我正在尝试使用 COM 对象,但我遇到了参数类型 VARIANT* 的问题。我可以很好地使用 COM 对象的功能,除非它们具有这种类型的参数。
generateDocumentation生成的文档是:
QVariantList 参数 = ...
object->dynamicCall("GetRanges(int,int,int&, QVariant&)", params);
根据COM对象提供的文档,参数应该是LONG、LONG、LONG*和VARIANT*类型,准确来说VARIANT*是指向包含BSTR数组的VARIANT的指针。
我通常应该能够检索第三个和第四个参数(类型为 LONG* 和 VARIANT*),并且函数不使用它们的值。
这是我的代码(a 和 b 是 int 之前初始化的):
QStringList sl;
QVariantList params;
int i = -1;
params << QVariant (a);
params << QVariant (b);
params << QVariant (i);
params << QVariant (sl);
comobject->dynamicCall("GetRanges(int,int,int&,QVariant&)",params);
sl = params[3].toStringList();
i = param[2].toInt();
现在使用该代码,我得到的只是一个错误 QAxBase: Error calling IDispatch member GetRanges: Unknown error,这不是很有帮助。
我试图改变一些事情,并通过使用这段代码设法取得了进展:
QStringList sl;
QVariant v = qVariantFromValue(sl);
QVariantList params;
int i = -1;
params << QVariant (a);
params << QVariant (b);
params << QVariant (i);
params << qVariantFromValue((void*)&v);
comobject->dynamicCall("GetRanges(int,int,int&,QVariant&)",params);
sl = params[3].toStringList();
i = param[2].toInt();
它摆脱了错误,最后 i 的值是正确的,但 sl 仍然是空的。而且我知道不应该这样,因为我有一个 C# 示例演示可以正常工作。
所以,如果有人知道如何使它工作......
要不然我看了一圈,发现也可以查询接口直接使用,但是我不是很懂,不知道能不能解决我的问题。
我在 Windows7 64 位平台上,我使用 msvc2012 作为编译器。我现在使用的是 Qt 5.1.0,但它在 5.0.2 中也不起作用。
【问题讨论】:
标签: c++ qt com qvariant activeqt