docs/Kompas3D_SDK/ становится каноническим источником справки КОМПАС SDK и включается в репозиторий (2491 файл, ~14 МБ). HTML-зеркало docs/KOMPAS_SDK_ru-RU/ (~1.4 ГБ, © АСКОН) и генератор tools/build_kompas3d_sdk.py больше не нужны — регенерация не предполагается. - .gitignore: MD-база разблокирована; зеркало остаётся проигнорированным (safety-net на случай повторной локальной выгрузки). - CLAUDE.md / SKILL.md: убраны упоминания регенерации и зеркала. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
12 KiB
title, type, api, tags, sources
| title | type | api | tags | sources | |||||
|---|---|---|---|---|---|---|---|---|---|
| Builder C++ | guide |
|
|
|
Компиляция библиотек
Builder C++
1.Задайте пути к подключаемым модулям. Для этого вызовите команды Project — Options… — Directories/Conditionals — Include path и Library path. 2.Отключите прежние файлы библиотек (файлы *.lib). Возможность компиляции 64-разрядных библиотек есть в Embarcadero RAD Studio XE3 и выше. Для 64-разрядной версии КОМПАС-3D требуется подключение файлов SDK\lib64\kAPI2D5bc.a, kAPI3D5bc.a. Файлы архивов .а генерируются утилитой MKEXP.EXE: MKEXP.EXE kAPI2D5bc.a kAPI2D5.dll Для использования API7 может потребоваться подключение файлов kAPI7bc.lib или kAPI7bc.а. см. также: http://forum.ascon.ru/index.php/topic,25560.20.html http://docwiki.embarcadero.com/RADStudio/XE3/en/MKEXP.EXE,_the_64-bit_Windows_Import_Library_Tool_for_C%2B%2B Рекомендуется вместо подключения в дереве сделать линковку библиотек через директиву #pragma: #pragma comment(lib, "kAPI2D5bc") #pragma comment(lib, "kAPI3D5bc") В настройках проекта требуется добавить путь к каталогу SDK\lib64, см. пример в SDK\C++\CBuilder\step1 При адаптации библиотеки, созданной в старых версиях Borland C++ Builder для Embarcadero RAD Studio XE3 и выше, требуется открыть в блокноте и изменить значение параметра None на VCL При компиляции под x64 не работает директива __pascal. Требуется изменение функций. Было: extern "C" unsigned int far __pascal WINAPI LibraryId() { return IDR_LIBID; } extern "C" void far __pascal LibraryEntry( UINT comm ) Стало: extern "C" unsigned int far __export WINAPI LIBRARYID() { return IDR_LIBID; } extern "C" void far __export WINAPI LIBRARYENTRY( UINT comm ) В x64 __export не работает для функций, возвращающих указатель на строку char * и wchar_t *. Требуется объявление как __declspec(dllexport): extern "C" char * __declspec(dllexport) __stdcall LIBRARYNAME() Нужно учитывать, что класс string стал Unicod-ным. Вместо него рекомендуется использовать классы AnsiString или Unicod-ный WideString. В Embarcadero RAD Studio есть поддержка Unicod. Рекомендуется выполнить перевод библиотеки на Unicod с использованием Unicod-ных аналогов структур и функций.
Builder C++ Automation
1.Задайте пути к подключаемым модулям. Для этого вызовите команды Project — Options… — Directories/Conditionals — Include path и Library path. 2.Отключите прежние файлы библиотек (файлы *.lib). Для 64-разрядной версии КОМПАС-3D требуется использовать файл kapi5bc.a. Рекомендуется вместо подключения в дереве сделать линковку библиотек через директиву #pragma. #pragma comment(lib, "kAPI5bc") 3.Удалите файлы ks_tlb.h, ks_tlb.cpp, ks_ocx.h, ks_ocx.cpp. 4.Подключите новую библиотеку (файл с расширением tlb). Для этого выполните следующие действия. 4.1. Вызовите команду Project — Import type library — Add. В Embarcadero RAD Studio XE3 и выше импорт выполняется командой Component — Import —Component —VCL for C++ Win32. Перед запуском команды требуется снять в настройках Tools — Options — Delphi Options — Type Library — RTL следующие флаги: Check for UTF8 data in type library Store Unicode data as UTF8 in type library Аналогичные настройки снять в Tools — Options — С++ Options — Type Library — RTL. Данные настройки влияют на корректность импорта helpstring-ов из tlb. 4.2. Выберите файл kAPI5.tlb или kAPI7.tlb для использования API7, а также файлы констант ksConstants.tlb и ksConstants3D.tlb. Так как файл kAPI7.tlb использует все перечисленные tlb, достаточно импорт сделать с данного файла — при этом будут созданы файлы для всех tlb. 4.3. Выключите опцию Generate Component Wrapper. 5.Укажите путь к папке SDK\Include в параметре Unit dir name. 6.Нажмите кнопку Create Unit. 7.Переименуйте полученные файлы в ks_tlb.h, ks_tlb.cpp (ksAPI7.cpp и ksAPI7.h при импорте kAPI7.tlb). При сохранении под другим именем в ks_tlb.cpp изменяется имя namespace Kompas6api5_tlb на ks_tlb. Требуется вернуть Kompas6api5. 8.Отредактируйте в файле ks_tlb.cpp подключение h файла, если оно не изменилось при сохранении. В ksAPI7.h требуется отредактировать подключение фалов, полученных с kAPI5.tlb.
Delphi
Замените файлы LibTool.pas, LIBdb.pas, LDefin.pas, LDefin2D.pas, LDefin3D.pas на новые. Возможность компиляции 64-разрядных библиотек есть в Embarcadero RAD Studio XE2 и выше. При компиляции под x64 не работает директива __pascal. Требуется изменение функций. Критично для функций, имеющих более одного параметра. Требуется разворот параметров функций. Старый вариант: function CallBackP( _dynamic : Integer; // Признак динамического процесса phantom : Pointer; // Фантом info : PRequestInfo; // Параметры запроса var angl, y, x : Double; // Параметры запроса com : integer ) : Integer; pascal ; // Номер команды Новый вариант: function CallBackP( com : integer; var x, y, angl : Double; // Координаты курсора info : PRequestInfo; // Параметры запроса phantom : Pointer; // Фантом _dynamic : Integer // Признак динамического процесса ) : Integer; stdcall; // Номер команды Классы string и TString стали Unicod-ными, указатель PChar также стал Unicod-ным. Требуется замена на использование AnsiString и PАnsiChar. Рекомендуется выполнить перевод библиотеки на использование Unicod-ных аналогов структур и функций. При выполнении перевода рекомендуется использование Unicod-ных классов строк WideString и указателя на строку PWideChar.
Delphi Automation
Подключите новую библиотеку (файл с расширением tlb). Для этого выполните следующие действия. 1.Вызовите команду Project — Import type library — Add. В Embarcadero RAD Studio XE2 и выше импорт выполняется командой Component — Import — Component — VCL for Delphi Win32. 2.Выберите файл kAPI5.tlb. 3.Выключите опцию Generate Component Wrapper. 4.Укажите путь к корневой папке размещения примеров Unit dir name. 5.Нажмите кнопку Create Unit. 6.Переименуйте полученный файл в KsTLB.pas и отредактируйте его первую строку. 7.Найдите строчку Application = KompasObject; и исправьте на ksApp = KompasObject; Это нужно, чтобы избежать конфликта с глобальной переменной Delphi Forms.Application.
Компиляция библиотек
Builder C++ Builder C++ Automation Delphi Delphi Automation Visual Basic Visual C++ Python Рекомендации по доработкам библиотек, написанных на VC++, не имеющих WinApp и использующих MFC Использование библиотек типов интерфейсов Системы КОМПАС-3D
Python
Для получения возможности использования API Компас в Python требуется выполнить импорт с tlb-файлов ksConstants.tlb, ksConstants3D.tlb, kAPI5.tlb, kAPI7.tlb: from win32com.client import gencache kompas6_constants = gencache.EnsureModule("{75C9F5D0-B5B8-4526-8681-9903C567D2ED}", 0, 1, 0).constants kompas6_constants_3d = gencache.EnsureModule("{2CAF168C-7961-4B90-9DA2-701419BEEFE3}", 0, 1, 0).constants kompas6_api5_module = gencache.EnsureModule("{0422828C-F174-495E-AC5D-D31014DBBE87}", 0, 1, 0) kompas_api7_module = gencache.EnsureModule("{69AC2981-37C0-4379-84FD-5DD2F3C0A520}", 0, 1, 0)
Visual Basic
Подключите новую библиотеку (файл с расширением tlb). Для этого выполните следующие действия. 1.Вызовите команду Project — References… — Browse… 2.Выберите файл kAPI5.tlb.
Visual C++
1.Удалите файлы libautoold.cpp и libautoold.h с диска и из проекта. 2.Подключите новую библиотеку (файл с расширением tlb). Для этого выполните следующие действия. 2.1. Вызовите команду View — ClassWizard — Add Class — From a type Library. 2.2. Выберите файл V. 2.3. Выделите все интерфейсы в списке. Данный вариант работает корректно только в Visual C++ 6.0. В Visual C++ 2003 и выше. Для каждого интерфейса требуется перезадавать имя файла, в который он будет импортирован, что очень неудобно. Без перезадания для каждого интерфейса будет создан отдельный файл. Вместо генерации файлов через ClassWizard рекомендуется использовать директиву #import #import “kAPI5.tlb” При этом создается описание классов, являющихся оболочками над интерфейсами — так называемые умные указатели или smart Pointer. К названиям интерфейсов добавляется суффикс Ptr, что позволяет скрыть явное использование функций AddRef Release и QueryInterface, а также дает возможность использования свойств property.