0

への参照を返す C++ の COM 関数を呼び出す必要がありますSAFEARRAY(BSTR)

このドキュメントによると、次のようになります。

QAxObject object = new QAxObject(...);
QStringList list;

for(int i=0; i<goodSize; i++)
    list << "10.0";

object->dynamicCall("Frequencies(QStringList&)", list);

for(int i=0; i<list.size(); i++)
    qDebug() << list.at(i);

しかし、リスト要素はそのまま10.0です。

何か不足していますか?

編集

私は Oleview.exe を使用しましたが、実際には、関数は次のようになりますvoid Frequencies(VARIANT* FrequencyArray);

しかし、ActiveX サーバーのドキュメントには次のように書かれていますUse a safearray of strings (VT_BSTR) or reals (VT_R8 for double or VT_R4 for float)

4

2 に答える 2

0

COM オブジェクトのFrequencies()関数の宣言は、ドキュメントの例と一致しますが、例が使用SAFEARRAY(VARIANT)し、代わりに COM オブジェクトが使用する点が異なりますSAFEARRAY(BSTR)。したがって、例のコードを文字列に適応させてみてください。

QList<QString> list;
...
QList<QVariant> parameters;
parameters << QVariant(list);
object->dynamicCall("Frequencies(QList<QString>&)", parameters);
于 2013-06-13T01:02:21.480 に答える
0

問題が見つかりました。結果の読み方でした。の最初の要素を読み取ってからparameters、に変換する必要がありましたQStringList。私は私に対して怒っています:(

IBKDataSet *data = function->FunctionData();
int nbFrequencies = data->dynamicCall("GetNumberOfXAxisEntries()").toInt();
QList<QString> frequencies;
for(int i=0; i<nbFrequencies; i++) {
    frequencies << "0.0";
}
QList<QVariant> parameters;
parameters << QVariant(frequencies);
data->dynamicCall("Frequencies(QList<QString>&)", parameters);
frequencies = parameters.first().toStringList();
for(int j=0; j<frequencies.size(); j++) {
    qDebug() << frequencies.at(j);
}
于 2013-06-24T07:05:03.290 に答える