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