-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

0

我发现需要初始化 saValues:

LPSAFEARRAY saValues = NULL;

然后一切都按预期工作。

于 2013-10-24T03:14:53.307 回答