Первая библиотека к КОМПАС-3D

Первая библиотека к КОМПАС-3D

Приведенный выше пример, демонстрирующий общий принцип программного выполнения трехмерных операций из внешнего приложения (плагина), вряд ли объяснил, как все-таки создать прикладную библиотеку для КОМПАС-3D. В этом разделе подробно рассмотрим разработку простейшей библиотеки, выводящей в среде КОМПАС сообщение «Привет из КОМПАСа!». Структура всех приложений для КОМПАС практически не отличается, поэтому такую библиотеку можно будет в дальнейшем использовать как заготовку для других более сложных утилит.

Прикладная библиотека для КОМПАС-3D представляет собой обычную DLL (Dynamic Link Library – динамически подключаемая библиотека Windows), только с расширением RTW. Такая библиотека подключается к КОМПАС, как и любая другая, уже известным нам способом: через менеджер библиотек посредством команды контекстного меню Добавить описание ? прикладной библиотеки.

Для выполнения примера создайте на жестком диске папку FirstLib, а в ней папку dcu, в которой будут храниться файлы библиотек КОМПАС.

Теперь можно приступить к выполнению проекта.

1. Запустите Delphi и создайте шаблон DLL-библиотеки, который предлагается по умолчанию. Для этого выполните команду File ? New ? Other. Появится окно New Items (рис. 6.20) со всевозможными шаблонами Windows-приложений и файлами Delphi (исполняемый EXE-файл, консольное приложение, форма или компонент Delphi и пр.). На вкладке New этого окна выберите пункт DLL Wizard и нажмите кнопку OK.

Рис. 6.20. Диалоговое окно New Items

Если вы хорошо знакомы с Delphi, например не раз выполняли в этой среде динамически подключаемые библиотеки, то для вас будет привычным созданный файл-заготовка проекта, начинающийся со служебного слова library. Сохраните его на жесткий диск в папку FirstLib под именем Hello_KOMPAS.dpr.

2. Теперь нужно связать этот файл с библиотеками типов КОМПАС, чтобы можно было пользоваться интерфейсами API. Выполните команду Project ? Import Type Library, затем из списка Import Type Library появившегося окна выберите пункт Kompas6API5 (Version 1.0). При этом в текстовом поле под списком должен отобразиться путь к файлу библиотек типов КОМПАС (например,  C:Program FilesASCONKOMPAS-3D V10BinkAPI5.TLB). Выбрав указанный пункт, нажмите кнопку Create Unit (рис. 6.21).

Рис. 6.21. Подключение библиотеки типов КОМПАС к Delphi

Примечание

Если в списке Import Type Library нет необходимого пункта, вы можете добавить его вручную, нажав кнопку Add и отыскав файл kAPI5.TLB (он находится в каталоге Bin папки, в которой установлен КОМПАС).

3. За несколько секунд Delphi сгенерирует PAS-файл с именем Kompas6API5-TLB, который будет иметь описание всех интерфейсов API 5. Измените имя (заголовок) скомпилированного модуля (автоматически добавленного в проект библиотеки), с Kompas6API5-TLB на ksTLB и сохраните проект.

4. Закройте окно, в котором был открыт файл Kompas6API5-TLB.pas, в редакторе кода Delphi и измените имя файла на ksTLB.pas. Сгенерированный файл Kompas6API5-TLB.pas с интерфейсами размещается в каталоге Imports папки, в которой установлен Delphi, например C:Program FilesBorlandDelphi7Imports.

5. Скопируйте переименованный файл в каталог FirstLibdcu вашего проекта.

6. Перейдите в главное окно проекта. В разделе uses замените следующую строку: Kompas6API5-TLB in “C:Program FilesBorlandDelphi7ImportsKompas6API5-TLB.pas” на ksTLB. Напомню вам о том, что путь к Kompas6API5-TLB.pas может быть другим (он зависит от того, где установлен Delphi). Однако это не имеет значения, поскольку запись генерируется системой автоматически при компиляции файла библиотек типов. Указывать путь к модулю ksTLB, который был скопирован в папку dcu проекта, нет необходимости.

7. При компиляции прикладной библиотеки будут использованы множество различных файлов с описаниями интерфейсов, констант и пр. В принципе, они могут быть размещены где угодно (при этом в разделе uses следовало бы задавать каждый путь явно), но для удобства работы с проектом рекомендую хранить их в папке dcu, где уже находится файл ksTLB.pas. Где бы все эти файлы ни находились, в Delphi необходимо указать путь к ним. Для этого выполните команду Project ? Options, после чего на вкладке Directories/Conditionals открывшегося окна настроек проекта (рис. 6.22) задайте пути к файлам проекта:

Output directory – путь, по которому Delphi будет сохранять скомпилированный файл прикладной библиотеки (в нашем примере подойдет каталог FirstLib);

Unit output directory и Search path – полный путь к каталогу FirstLibdcu. По этим путям система будет искать необходимые файлы библиотек КОМПАСа, а также сохранять скомпилированные DCU-файлы.

Рис. 6.22. Задание путей к файлам проекта прикладной библиотеки

8. Перейдите на вкладку Application диалогового окна настроек проекта. В поле Target file extension введите расширение, которое будет применяться для файла будущей библиотеки – RTW. Нажмите OK, чтобы сохранить настройки.

Теперь можете сохранить проект и выполнить компиляцию (для этого воспользуйтесь командой Project ? Compile Hello_KOMPAS или сочетанием клавиш Ctrl+F9). В результате в папке FirstLib должна появиться пока еще пустая и бесполезная библиотека, файл которой назван системой Hello_KOMPAS.rtw.

Чтобы RTW-библиотека, написанная на Delphi, могла взаимодействовать с КОМПАС, в ней обязательно должны присутствовать как минимум три функции (для сред программирования на базе языка C или C++ достаточно двух, так как функции LibraryName и LibraryId объединены в одну – unsigned int WINAPI LIBRARYID()):

• LibraryEntry – точка входа в библиотеку;

• LibraryName – возвращает имя библиотеки, отображаемое в менеджере библиотек;

• LibraryId – возвращает идентификатор библиотеки (позже его можно использовать при работе с самой библиотекой, для подключения списка меню ее команд и пр.).

Все эти функции обязательно должны быть экспортными, то есть экспортируемыми из данной DLL, чтобы система КОМПАС могла их видеть и вызывать. По этой причине их обязательно нужно вынести в раздел exports прикладной библиотеки.

Добавьте описание этих функций в вашу библиотеку (листинг 6.8).

Листинг 6.8. Три базовых функции RTW-библиотеки

library Hello_KOMPAS;

uses

SysUtils, Classes, ksTLB;

{$E rtw}

{$R *.res}

function LibraryName: PChar; pascal;

begin

Result := “Первая библиотека”;

end;

function LibraryId: integer; pascal;

begin

Result := 100;

end;

procedure LibraryEntry(command: WORD); pascal;

begin

end;

exports

LibraryName name “LIBRARYNAME”,

LibraryId name “LIBRARYID”,

LibraryEntry name “LIBRARYENTRY”;

begin

end.

Скомпилируйте полученный код и подключите файл библиотеки к КОМПАС. Убедитесь, что в окне менеджера отобразилось заданное в функции LibraryName имя библиотеки. Запускать приложение не нужно, поскольку все равно ничего не произойдет – будет вызываться пустая функция точки входа в библиотеку LibraryEntry.

Совет

Любая создаваемая вами на Delphi библиотека будет иметь три указанные функции. Вы можете сохранить проект на данном этапе в какую-либо другую папку и в дальнейшем при разработках новых библиотек использовать его как заготовку.

Теперь нужно сделать так, чтобы библиотека стала рабочей.

Сначала необходимо в раздел uses добавить еще один подключаемый модуль – ksAuto, а сам файл этого модуля (ksAuto.pas) перенести в каталог FirstLibdcu. Файл ksAuto.pas вместе с другими файлами библиотек API системы КОМПАС находится в каталоге SDKInclude папки, в которой установлена текущая версия КОМПАС-3D.

Внутри ksAuto.pas есть многочисленные ссылки на другие файлы с определением классов КОМПАС API. Явно подключать их в разделе uses не нужно, но следует перенести в один каталог с файлом ksAuto.pas. Для данного проекта достаточно всего четыре файла (для более сложных понадобятся, конечно, и другие): ks2DCOM-TLB.pas, LDefin2D.pas, LibTool.pas и LtDefine.pas. Просто скопируйте эти файлы из SDKInclude в папку FirstLibdcu вашего проекта.

В файле проекта объявите глобальную переменную kompas типа KompasObject, а в процедуру входа в библиотеку добавьте следующий код (листинг 6.9).

Листинг 6.9. Вывод текстового сообщения

uses

SysUtils, Classes, ksTLB, ksAuto;

{$E rtw}

{$R *.res}

// глобальная переменная приложения КОМПАС API

var kompas : KompasObject;

// код пропущен

procedure LibraryEntry(command: WORD); pascal;

begin

// инициализация объекта KompasObject

// с помощью функции CreateKompasObject

kompas := KompasObject(CreateKompasObject);

// если все прошло успешно

if (kompas = nil) then exit;

// выводим первое сообщение

kompas.ksMessage(“Привет из КОМПАСа!”);

// обнуляем переменную kompas

kompas := nil;

end;

Сохраните и скомпилируйте проект, после чего запустите библиотеку и выполните ее единственную команду. В результате библиотека выдаст первое приветственное сообщение (рис. 6.23).

Рис. 6.23. Сообщение, посланное библиотекой

Внимание!

При компиляции проекта прикладная библиотека должна быть обязательно отключена в менеджере библиотек, иначе компилятор сообщит об ошибке.

Исходные файлы этой простейшей библиотеки, а также сам исполняемый файл приложения Hello_KOMPAS.rtw находятся на прилагаемом к книге компакт-диске в папке ExamplesГлава 6Delphi ProgrammingFirstLib. При попытке компиляции исходных файлов на своем компьютере вы должны учитывать, что куда бы ни были скопированы исходники с диска, пути к файлам библиотек КОМПАС, указанные в настройках проекта, будут отличаться. По этой причине перед компиляцией обязательно отредактируйте эти пути (см. рис. 6.22) и лишь после этого выполняйте сборку библиотеки.

Данный текст является ознакомительным фрагментом.