Загрузка TLB во время выполнения в C# .net 4.0

У меня есть файл TLB из сторонней библиотеки. Существует много версий этой библиотеки, однако функции, которые я использую в tlb, являются постоянными, т.е. не меняются от одной версии к другой.

Я добавил файл tlb в проект в качестве ссылки COM. Я могу успешно создавать и вызывать функции из сторонней библиотеки.

При развертывании своего приложения я не могу гарантировать, что на компьютере пользователя будет установлена ​​та же версия стороннего производителя, что и у меня. Когда возникает такой сценарий, они получают ошибку нарушения доступа (0xc0000005), как только вызывается функция из сторонней библиотеки.

Как я могу загрузить файл tlb, который находится на ПК пользователя во время выполнения?

1 ответ

Решение

Вы должны иметь возможность использовать динамический C# 4 вместе с Type.GetTypeFromProgID для загрузки COM-объекта и использовать его через динамическое связывание.

 dynamic obj = Activator.CreateInstance(Type.GetTypeFromProgID(comTypeName));

 // Use object via dynamic binding directly
 obj.Foo();

Это исключает необходимость компилирования чего-либо о версии COM-объекта в вашу сборку. Пока вы используете правильный API и методы /etc, которые вы используете, существуют, он будет работать с любой версией.

Другие вопросы по тегам