Маршал список объектов от VB6 до C # - PullRequest
3 голосов
/ 27 апреля 2010

У меня есть разработка, которая требует передачи объектов между приложением VB6 и библиотекой классов C #. Объекты определены в библиотеке классов C # и используются в качестве параметров для методов, предоставляемых другими классами в той же библиотеке. Все объекты содержат простые строковые / числовые свойства, поэтому маршалинг был относительно безболезненным.

Теперь у нас есть требование передать объект, который содержит список других объектов. Если бы я кодировал это в VB6, у меня мог бы быть класс, содержащий коллекцию в качестве переменной-члена. В C # у меня может быть класс с переменной-членом List.

Можно ли построить класс C # таким образом, чтобы приложение VB6 могло заполнить этот внутренний список и успешно его маршалировать? У меня нет большого опыта здесь, но я бы предположил, что мне нужно использовать массив типов объектов.

1 Ответ

2 голосов
/ 27 апреля 2010

Опции более ограничены через COM, чем у вас в C #:

  • Вы не можете использовать дженерики (COM не поддерживает это, и TLBEXP их пропустит)

  • Существует старый класс ArrayList. Или массив.

  • Уровень взаимодействия COM автоматически сгенерирует перечислитель COM для класса C #, который реализует IEnumerable (неуниверсальная версия), вы можете выполнить его на стороне VB6 с помощью For Each.

  • Аналогично, он генерирует IEnumerable для класса COM, который реализует перечислитель COM. Вы можете использовать foreach в коде C # для перечисления Коллекции VB6. Выберите между ними в зависимости от того, кто создает коллекцию.

...