Всем привет!
Есть самостоятельная программа, которая считывает свойства документов Компас-3D (cdw/spw)
и далее производит определенные действия. Программа вызывает API Компас-3D в невидимом режиме,
открывает файлы чертежей/спецификаций только на чтение. Программа написана на delphi.
Изначально подключение к API Компас-3D осуществлялось так:
"...K5 := KompasObject(CreateOleObject('KSINVISIBLE.Application.5'))...", на Компас-3D версии 16.1.
Поскольку 'KSINVISIBLE.Application.5' порождал сторонний от "KOMPAS.Exe" процесс, то получалось
обходить две проблемы:
1.
Если к документу Компас-3D, скажем спецификация (spw), были подключены, но не найдены
другие документы (подключенные документы), то запись, типа doc := K7.Documents.Open(cadName, False, True), где
doc - указатель на объект IKompasDocument, возвращала nil. Указатель doc был равен nil потому, что
Компас-3D ожидал ответа от пользователя: "Изменены документы, подключенные к спецификации или к ее объектам. Перестроить спецификацию?".
Так как документ открывался в режиме "невидимки": doc := K7.Documents.Open(cadName, False, True), Компас-3D не получал ответа
и возвращал nil. Но стоило только сделать открытие документа Компас-3D, типа видимым, с использованием флага ksHideMessageYes:
"...
K7.HideMessage := ksHideMessageYes;
doc := K7.Documents.Open(cadName, True, True);
..."
при том, что используется 'KSINVISIBLE.Application.5' и документ все равно будет невидим, как
"...doc := K7.Documents.Open(cadName, True, True);..." вернет указатель на документ!
2.
Для запуска 'KSINVISIBLE.Application.5' не требовалось запущенной пользователькой сессии на ОС (Windows)!
А это особенно актуально при запуске утилиты из под службы Windows:
сбой сервера -> автоматическая перезагрузка -> выполнение программы (нет нужды порождать пользовательскую сессию)
С приходом Компас-3D 17, подключение к API было измено с "...K5 := KompasObject(CreateOleObject('KSINVISIBLE.Application.5'))..."
на "...K5 := KompasObject(CreateOleObject('kompas.Application.5'));..." так как при использовании 'KSINVISIBLE.Application.5'
указатель на документ Компас-3D равен nil!
Вопрос: - возможно ли успешно использовать 'KSINVISIBLE.Application.5 в компас 17 ? (как это сделать)
- возможно ли подключаться к API Компас-3D "...K5 := KompasObject(CreateOleObject('kompas.Application.5'));..." не под сессией пользователя?
'KSINVISIBLE.Application.5 в компас 17 - использует лицензию, получить её можно в АСКОН.
Спасибо.