我有 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)
}