Как иметь несколько библиотек типов в проекте Delphi? - PullRequest
2 голосов
/ 28 января 2012

Если у вас есть проект Delphi и вы хотите добавить в него библиотеку типов, вы можете довольно легко.

Однако мы хотим иметь возможность добавлять несколько разных библиотек типов. Delphi XE IDE, кажется, заставляет вас иметь одну и только одну библиотеку типов с именем

MyProject.tlb

Я бы хотел иметь возможность иметь несколько библиотек типов в нашем основном проекте и создавать COM-плагины, но мне не нужна одна библиотека монолитных типов, а скорее несколько библиотек типов для различных типов плагинов.

Это выполнимо? Только ли в среде IDE действует правило "может быть только один TLB"?

Ответы [ 2 ]

7 голосов
/ 28 января 2012

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

Похоже, ваша IDE ограничивает вас одним типом lib. Если вы можете редактировать необработанный файл .RC, вы можете включить туда ссылку на ваш файл .tlb.

E.G ... Из раздела TEXTINCLUDE файла .RC.

3 TEXTINCLUDE  
BEGIN
    "1 TYPELIB ""junk.tlb""\r\n"
    "\0"
END

4 TEXTINCLUDE  
BEGIN
    "2 TYPELIB ""junk2.tlb""\r\n"
    "\0"
END

Компилятор ресурсов должен включать его в качестве второго ресурса TYPELIB. Я просто сделал это вручную, я не использовал поддержку Visual Studio.

Как только я скомпилировал свой EXE-файл, я открыл его и посмотрел на ресурсы. Было два типа библиотек.

Two Type Libraries in an EXE

Надеюсь, это поможет.

3 голосов
/ 28 января 2012

AFAIK, IDE не поддерживает несколько библиотек типов в проекте. Однако вы можете создать отдельные внешние библиотеки типов («Файл»> «Создать»> «Другой»> «Проекты Delphi»> «Активные»> «Библиотека типов»), чтобы создать автономные файлы .tlb, зарегистрировать их в ОС, а затем при необходимости сослаться на них в библиотеке типов вашего проекта .

Однако, если все, что вы делаете, - это создаете COM-плагины, которые использует ваш основной проект, тогда нет необходимости включать COM-плагин TypeLibraries в ваш основной проект. Все, что вам нужно, это определения интерфейса. Просто добавьте сгенерированные <UnitName>_TLB.pas единицы в пункты uses вашего основного проекта, где это необходимо. Не добавляйте сами файлы .tlb в ваш основной проект.

...