Загрузка 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, которые вы используете, существуют, он будет работать с любой версией.