у меня есть .tlb
файл, который выставляет, через COM
, функции C#
DLL
, Я хочу загрузить это .tlb
во время выполнения и использовать функции в моем родном проекте.
Хотя я могу загрузить библиотеку с помощью LoadTypeLib
функция, я не уверен, как ITypeLib
вернулся помогает мне в использовании функций внутри .NET DLL
, С регулярным DLL
Я мог бы использовать GetProcAddress
с DLL
обработать и получить адрес функции, но я не думаю, что она будет работать с библиотекой типов?
Как же тогда подойти к этому?
Библиотека типов не содержит никакого кода, она содержит описание API и объектов, функций и других типов, предоставляемых этим API. Он может описывать стандартную DLL и ее функции, а также может описывать COM-объекты, некоторые из которых могут быть непосредственно созданы, другие могут быть получены из других функций или объектов. Но он содержит только описание.
Как правило, TLB необходим только во время компиляции, поэтому компилятор может знать типы объектов и генерировать правильный код для их вызова. Вам это больше не нужно во время выполнения.
Таким образом, это аналог файла заголовка. Действительно, используя #import
фактически генерирует файл заголовка автоматически (посмотрите его в каталоге сборки), и этот файл заголовка — это все, что фактически требуется для компиляции вашего приложения. Таким образом, библиотека типов (более или менее) эквивалентна заголовочному файлу двоичного формата для COM DLL.
Во время выполнения файл заголовка не требуется, равно как и библиотека типов. Чтобы условно использовать объекты в зависимости от того, установлены ли они, вы делаете это по существу так же, как и для любой другой библиотеки DLL. То есть вы смотрите, установлена ли DLL, и если нет, вы не пытаетесь использовать код DLL.
Для объектов COM это может быть проще. Попытайтесь создать один из объектов, и если вы потерпите неудачу с REGDB_E_CLASSNOTREG
тогда это означает, что DLL не установлена (или не зарегистрирована должным образом).