2015-08-28 2 views
3

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

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

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

+0

Вы хотите сделать это во время выполнения, например. если вы создаете привязку языка сценариев? Или вы просто хотите сделать это во время компиляции и сможете использовать объекты во время выполнения? – Ben

+0

Я хочу видеть, присутствует ли 'tlb', а затем использовать объекты внутри него, то есть решение использовать COM-объекты внутри него должно выполняться во время выполнения. Я хочу избежать использования '# import' для' tlb', который, я полагаю, является стандартным способом его использования. – user1173240

+0

Правильно, но вам нужно использовать разные COM-объекты, например. созданный позже, или набор COM-объектов, которые вы собираетесь использовать во время компиляции? – Ben

ответ

4

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

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

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

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

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

Смежные вопросы