Вопрос

Мы работаем с существующим нативным приложением (скорее всего, написанным на VB), которое загружает сборки и вызывает методы с "поздней привязкой". У нас нет доступа к его исходному коду.

Мы хотим реализовать этот интерфейс на C #, и чтобы нативное приложение вызывало нашу сборку на C #.

Возможно ли это на самом деле?

Нужно ли нам что-нибудь сделать, помимо сопоставления имен методов и сигнатур методов, чтобы заставить это работать?

Это было полезно?

Решение 2

Вот шаги, необходимые для того, чтобы это заработало:

  1. Отметьте свой класс [ComVisible(true)] и не забудьте присвоить ему уникальный атрибут [Guid]
  2. Сопоставьте свой ProgID с вашим классом, который обычно является MyNamespace.MyClass, но вы можете добавить атрибут в свой класс, чтобы переопределить и это
  3. Укажите соответствующие атрибуты [DispId] для каждого метода, который будет вызван
  4. Скомпилируйте свою сборку и запустите regasm.exe на своей сборке

И вуаля!Машинный код может вызывать ваш C # через "позднюю привязку".Мне, конечно, пришлось настроить несколько разделов реестра, чтобы мое родное приложение знало, как загружать мою сборку, но все работает.

Другие советы

Если ты пытаешься дозвониться.ЧИСТЫЙ код из VB6 самым чистым способом было бы сделать так, чтобы код C # отображался как COM-объект для кода VB6 - так что да, вам нужно будет пометить свой код C # как ComVisible и убедитесь, что он выглядит как существующий COM-интерфейс.

Обновить: Здесьэто статья, которая поможет вам начать.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top