Компас v20, подключение к АПИ5

Автор graphdark, 25.10.22, 14:38:28

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

graphdark

Внезапно решился и поставил 20. И все мои приложения упали на:
  Kompas := KompasObject(GetActiveOleObject('Kompas.Application.5'));Это подключение к апи сменили или просто регистрация библиотек слетела? Было у кого?

graphdark

Модератор. Это вопрос точно к программистам. Я сам программист. Зря перемещаете.)

p3452

Для режима "контролер", так:
Если программу не перекомпилировали на "новые" библиотеки, а старые были зарегистрированны, то и работать должна на старых...
Если же программа уже компилировалась (перекомпилировалась) на новых библиотеках, то перед переходом на новую версию программы нужно было убрать из реестра (разрегистрировать) старые библиотеки и зарегистрировать новые.

В Вашем случае, скорее всего, достаточно будет просто зарегистрировать новые библиотеки.

Vi2

Цитата: p3452 от 25.10.22, 23:28:26В Вашем случае, скорее всего, достаточно будет просто зарегистрировать новые библиотеки.
Я думаю, что Компас правильно регистрирует свои библиотеки.

ТС не написал с какой версии Компаса он смигрировал на 20 и какую среду/язык использует.

graphdark

Цитата: Vi2 от 26.10.22, 10:56:36ТС не написал с какой версии Компаса он смигрировал на 20 и какую среду/язык использует.
Компас 18 раньше был. Пишу на Delphi.
"C:\Program Files\ASCON\KOMPAS-3D v20\Bin\KOMPAS.Exe" -registerНе помогло.

p3452

Цитата: graphdark от 26.10.22, 11:49:28"C:\Program Files\ASCON\KOMPAS-3D v20\Bin\KOMPAS.Exe" -registerНе помогло.
Это регистрация библиотек ПРИЛОЖЕНИЙ Компас-а - не то!
Не знаю что Вы используете (какие интерфейсы) в программах, но, как пример, можно глянуть файл \SDK\Samples\register.bat

Vi2

#6
Цитата: p3452 от 26.10.22, 13:32:03Это регистрация библиотек ПРИЛОЖЕНИЙ Компас-а - не то!
"KOMPAS.Exe -register" - это регистрация Компаса как СОМ сервера. В этот момент он зарегистрирует только те библиотеки (TLB), которые расположены в нём и те объекты, которых он знает. Скорее всего, в KOMPAS.Exe никаких своих библиотек TLB внутри себя нет, потому что они вынесены и лежат рядом с ним. Хотя, возможно, он может и зарегистрировать их, по крайней мере, это сделать можно.

У меня нет именно 18 версии. Есть 17, 19, 20 и 21. Судя по описанию этих библиотек, выражение Kompas := KompasObject(GetActiveOleObject('Kompas.Application.5')); безопасно, т.к.
- ProgID 'Kompas.Application.5' существует и правильно указывает на объект Компаса вернее, на его GUID, а он не изменился;
- GetActiveOleObject() - это системная win функция получения активного объекта. Она возвращает самый общий интерфейc IUnknown, который есть у любого объекта;
- KompasObject() переводит полученный интерфейс в интерфейс необходимого типа. Это dispinterface, почти IDispatch, который также не менял свой GUID интерфейса.

Поэтому затруднения непонятны. И, по-видимому, связаны с Дельфи.

PS
Сама технология придумана ,чтобы не нужно было перестраивать приложения. И, вроде, Компас не нарушает эти правила.

PPS
А не связаны ли затруднения с разрядностью 32 и 64? Когда там Компас перешёл на 64 разряда? Хотя вряд ли, т.к. приложения не зависят от разной разрядности.

PPPS
Если записать следующий текст в файл kompasexist.vbs и запустить, то у меня выдаётся "Object" и "C:\Program Files\ASCON\KOMPAS-3D v21\Sys", что говорит о работоспособности Компаса
On error resume next
set ks = Nothing

set ks = GetObject(,"Kompas.Application.5")
msgbox typename(ks)

if not ks is Nothing then
msgbox ks.ksSystemPath(0)
end if
+ Благодарностей: 2