我正在尝试使用 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 中也不起作用。