Загрузка и использование библиотеки типов (.tlb) во время выполнения

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

Хотя я могу загрузить библиотеку с помощью LoadTypeLib функция, я не уверен, как ITypeLib вернулся помогает мне в использовании функций внутри .NET DLL, С регулярным DLLЯ мог бы использовать GetProcAddress с DLL обработать и получить адрес функции, но я не думаю, что она будет работать с библиотекой типов?

Как же тогда подойти к этому?

3

Решение

Библиотека типов не содержит никакого кода, она содержит описание API и объектов, функций и других типов, предоставляемых этим API. Он может описывать стандартную DLL и ее функции, а также может описывать COM-объекты, некоторые из которых могут быть непосредственно созданы, другие могут быть получены из других функций или объектов. Но он содержит только описание.

Как правило, TLB необходим только во время компиляции, поэтому компилятор может знать типы объектов и генерировать правильный код для их вызова. Вам это больше не нужно во время выполнения.

Таким образом, это аналог файла заголовка. Действительно, используя #import фактически генерирует файл заголовка автоматически (посмотрите его в каталоге сборки), и этот файл заголовка — это все, что фактически требуется для компиляции вашего приложения. Таким образом, библиотека типов (более или менее) эквивалентна заголовочному файлу двоичного формата для COM DLL.

Во время выполнения файл заголовка не требуется, равно как и библиотека типов. Чтобы условно использовать объекты в зависимости от того, установлены ли они, вы делаете это по существу так же, как и для любой другой библиотеки DLL. То есть вы смотрите, установлена ​​ли DLL, и если нет, вы не пытаетесь использовать код DLL.

Для объектов COM это может быть проще. Попытайтесь создать один из объектов, и если вы потерпите неудачу с REGDB_E_CLASSNOTREG тогда это означает, что DLL не установлена ​​(или не зарегистрирована должным образом).

4

Другие решения


По вопросам рекламы [email protected]