COM-метод возвращает правильное значение только тогда, когда он вызывается с интервалами паузы

У меня есть 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)
}

-1

Решение

Я обнаружил, что нужно инициализировать saValues:

LPSAFEARRAY saValues = NULL;

и тогда все работает как положено.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]