Это ActiveX API Sterling Trader Pro, верно? Вы создали Interop dll, используя tlbimp.exe
? API GetPositionList
ожидает массив, который будет содержать структуры типа structSTIPositionUpdate
. Обычно модификатор out
используется, если вызываемый объект инициализирует передаваемые данные, и ref
, если данные должны быть инициализированы. Согласно значению API модификатор должен быть out
, чтобы это работало:
structSTIPositionUpdate [] entries = new structSTIPositionUpdate[0]; // or null
num_entries_returned = GetPositionList(ref entries);
В качестве альтернативы, попробуйте создать массив этих структур, достаточно большой, чтобы вместить ожидаемое количество записей, а затем передать его в функцию:
structSTIPositionUpdate [] entries = new structSTIPositionUpdate[100]; // say
num_entries_returned = GetPositionList(entries);
Обновление: Если вы получаете несоответствия типов с System.Array
, попробуйте
System.Array entries = Array.CreateInstance(typeOf(structSTIPositionUpdate), N);
где N - количество элементов в массиве.