Как использовать неуправляемую COM DLL в C # без ссылок - PullRequest
2 голосов
/ 18 января 2012

Я пытаюсь написать DLL на C #, которая в рамках своей функциональности будет использовать методы внутри сторонней DLL.

Сторонняя DLL-библиотека COM, написанная на C ++, зарегистрирована на клиентских машинах как частьстороннего приложения.

Теперь я могу включить (ссылаясь на файл tlb) DLL в моём решении и без проблем взаимодействовать с ней.Однако имя DLL (не сигнатуры методов и т. Д.) Меняется каждый год как часть контроля версий, включенного третьей стороной.Кроме того, я не могу распространять сторонние библиотеки DLL (лицензирование и т. Д.).

Что я в основном хочу сделать, так это использовать неуправляемую библиотеку COM в моей библиотеке DLL без ссылки или включения библиотеки DLL в мое решение.* И я ищу хорошие статьи / примеры для этого конкретного требования.Я видел множество примеров использования неуправляемой DLL по имени файла, управляемого COM и т. Д., Но это не вписывается в то, чего я пытаюсь достичь.

Даже если кто-то может дать мне базовый пример, используя следующие элементы,отличная отправная точка:

Ответы [ 2 ]

2 голосов
/ 18 января 2012

Большинство COM-серверов поддерживают позднюю привязку. Очень похоже на использование Reflection в .NET. Вы должны использовать Type.GetTypeFromProgID () и Activator.CreateInstance (Type) для создания COM-объекта. Основные недостатки позднего связывания:

  • Вы не получаете IntelliSense
  • Любые ваши ошибки приводят к ошибкам во время выполнения вместо ошибок компиляции
  • намного медленнее
  • Синтаксис C # является болезненным, если вы не можете использовать ключевое слово C # версии 4 dynamic или использовать оболочку VB.NET
  • Отладчик не может показать вам свойства COM-объекта. Вы видите только непрозрачный __ComObject

Но с тем преимуществом, что вам не нужно повторно запускать Tlbimp.exe, когда поставщик обновляет DLL. Если это обновление не работает, вы получите ошибку времени выполнения вместо диагностики компилятора. Всегда больно.

1 голос
/ 18 января 2012

В Интернете много ресурсов, и эта запись в блоге должна послужить хорошей отправной точкой.

...