Вопрос

мы рассматриваем возможность предоставления доступа к некоторым типам C # клиентам C ++ через COM.С какими проблемами мы можем столкнуться в течение срока действия проекта?Например.как будет осуществляться управление версиями?

Что касается управления версиями, то, судя по чтению это что мы должны украсить наши типы, чтобы выставлять их напоказ [ClassInterface(ClassInterfaceType.None)] и используйте явный интерфейс.Таким образом, я предполагаю, что мы полностью контролируем интерфейс, который будет доступен COM-клиентам.

Заранее благодарю.

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

Решение

Поскольку вы используете клиент на C ++, вам обязательно следует использовать явные интерфейсы для ранней привязки.Интерфейсы отправки полезны при использовании скриптовых клиентов, таких как VBS, но они редко полезны для клиентов C ++.

Единственный способ обновить интерфейс - это создать новый интерфейс (возможно, наследующий исходный интерфейс).При использовании явных интерфейсов вы имеете полный контроль над этим процессом.

Это означает, что вы должны создать интерфейс для каждого класса, который вы собираетесь предоставить через COM.Не забудьте пометить каждый интерфейс и класс атрибутами ComVisible и Guid.Также все ваши классы должны иметь конструктор по умолчанию.

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

Вам нужно будет прочитать об атрибуте GUID (включая это) поддерживать двоичную совместимость и перестраивать клиенты только при необходимости.

Также вас может заинтересовать атрибут ComVisible, который помогает уменьшить загрязнение реестра.

Чтобы получить полный контроль над COM-интерфейсами, определите их в MIDL.Создайте библиотеку типов с этими интерфейсами в проекте C ++, затем импортируйте библиотеку типов в C # и реализуйте интерфейсы.

Такой подход полезен со сложными интерфейсами, где маршалинг не является тривиальным.

Версии должны быть выполнены в стиле COM, изменяя GUID и добавляя новые или наследуя интерфейсы.

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