У меня есть сторонняя библиотека COM, которую я использую, и у меня проблемы с параметрами массива.
Подпись метода, которую я вызываю, выглядит следующим образом:
int GetItems(ref System.Array theArray)
В документации сказано, что возвращаемое значение метода - это число элементов, которые он будет заполнять в массиве, но когда он вызывается, все значения в массиве являются просто значениями по умолчанию (они являются структурами), даже если метод возвращает ненулевое возвращаемое значение.
Я знаю, что здесь происходит что-то интересное с COM-взаимодействием, но я действительно не очень разбираюсь в этом и не могу этого понять. Вот как я пытался получить к нему доступ:
Array items = Array.CreateInstance(typeof(structItem), 100);
int numberOfItems = instance.GetItems(items);
Array items = Array.CreateInstance(typeof(structItem), 100);
int numberOfItems = instance.GetItems(ref items);
structItem[] items = new structItem[100];
int numberOfItems = instance.GetItems(items);
structItem[] items = new structItem[100];
int numberOfItems = instance.GetItems(ref items);
Что я делаю не так?
ОБНОВЛЕНИЕ: Я думаю, что это может иметь какое-то отношение к SafeArrays, как описано здесь: http://www.west -wind.com / Weblog / posts / 464427.aspx Разница в том, что я должен передать массив по ссылке, а не просто обработать возвращаемое значение. Конкретное решение из этой статьи не работает, но я чувствую, что мне становится теплее.