-1

COM オブジェクトがあり、一度に初期化します。

ISTIPositionPtr _position;

CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
_position.CreateInstance(__uuidof(STIPosition));

次に、この COM オブジェクトのメソッドを呼び出す関数があります。

LPSAFEARRAY saValues;
structSTIPositionUpdate* pVals;
long count;
float sum = 0;  

if (SUCCEEDED(_position->GetPositionList(&saValues, &count))) {
    if (SUCCEEDED(SafeArrayAccessData(saValues, (void**)&pVals))) {
        for (int i = 0; i < count; ++i) {
            sum += pVals[i].fDollarsBot;
        }
        SafeArrayUnaccessData(saValues);
    }
    SafeArrayDestroy(saValues);
}

return sum;

問題は、その方法です:

 _position->GetPositionList(&saValues, &count)

正しい値またはゼロを返します。しかし、一時停止間隔で関数を呼び出すと、すべて正常に動作します。わかりません。おそらくこれは非同期メソッドであり、メソッドが終了するまで待機するメカニズムを使用する必要がありますか?

例えば:

long count = 0;
while (count == 0) {
    _position->GetPositionList(&saValues, &count)
}
4

1 に答える 1