Ошибка 'Класс не зарегистрирован' — КОМПАС-Макро. Как решить?

Автор JuniorEP, 16.07.21, 09:58:49

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

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

JuniorEP

Начал писать программку которая вставляет объекты записанные через КОМПАС-Макро.
Выбрал язык питон, и когда я создаю новую запись, перевожу в код и меняю данные, отлично все работает, никаких ошибок при запуске.
Но стоит мне перезагрузить компьютер, или что то еще, есть большая вероятность что снова появится это ошибка при попытке запустить программу.

Сама ошибка.
oobj = pythoncom.new(self.CLSID)
pywintypes.com_error: (-2147221164, 'Класс не зарегистрирован', None, None)

Ругается вот
kompas_document = application.ActiveDocument
kompas_document_2d = kompas_api7_module.IKompasDocument2D(kompas_document) #Ругается на эту строчку
iDocument2D = kompas_object.ActiveDocument2D()

Вират Лакх

Если у вас подключение к компасу создано библиотекой компас-макро, то может стоит заменить на независимое от этой библиотеки подключение.
from win32com.client import gencache, Dispatch
KompasAPI5 = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0)
KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
KompasConst = gencache.EnsureModule('{75C9F5D0-B5B8-4526-8681-9903C567D2ED}', 0, 1, 0).constants
KompasConst3D = gencache.EnsureModule('{2CAF168C-7961-4B90-9DA2-701419BEEFE3}', 0, 1, 0).constants
KompasObject = Dispatch('Kompas.Application.5', None, KompasAPI5.KompasObject.CLSID)
iApplication = Dispatch('Kompas.Application.7') # или KompasObject.ksGetApplication7()
https://forum.ascon.ru/index.php?topic=35479.msg282885#msg282885
https://forum.ascon.ru/index.php?topic=35594.msg284071#msg284071
+ Благодарностей: 2

Михаил88

В момент ошибки документ был активным? Сколько приложений компас было открыто? В диспетчере задач в фоновых процессах было приложение компас?
Можете конструкцию try - except для обработки исключений использовать.

pr0100

Иногда в процесах запускается второй компас. Если возникает такая ошибка. Нужно его прибить в ручную.

JuniorEP

Цитата: Вират Лакх от 16.07.21, 12:24:36Если у вас подключение к компасу создано библиотекой компас-макро, то может стоит заменить на независимое от этой библиотеки подключение.
from win32com.client import gencache, Dispatch
KompasAPI5 = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0)
KompasAPI7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
KompasConst = gencache.EnsureModule('{75C9F5D0-B5B8-4526-8681-9903C567D2ED}', 0, 1, 0).constants
KompasConst3D = gencache.EnsureModule('{2CAF168C-7961-4B90-9DA2-701419BEEFE3}', 0, 1, 0).constants
KompasObject = Dispatch('Kompas.Application.5', None, KompasAPI5.KompasObject.CLSID)
iApplication = Dispatch('Kompas.Application.7') # или KompasObject.ksGetApplication7()
https://forum.ascon.ru/index.php?topic=35479.msg282885#msg282885
https://forum.ascon.ru/index.php?topic=35594.msg284071#msg284071

Спасибо за потраченное время, я Вам благодарен!)

Цитата: Михаил88 от 16.07.21, 13:55:59В момент ошибки документ был активным? Сколько приложений компас было открыто? В диспетчере задач в фоновых процессах было приложение компас?
Можете конструкцию try - except для обработки исключений использовать.
1 - Да, документ был активным.
2 - Не считал, оказывается больше чем один)
Спасибо Вам за уделенное время, я Вам благодарен!

Цитата: pr0100 от 16.07.21, 21:58:00Иногда в процесах запускается второй компас. Если возникает такая ошибка. Нужно его прибить в ручную.

Спасибо, попробовал, вроде помогло, буду теперь думать как это исправить на постоянной основе)
Еще раз спасибо за время которое уделили этой проблеме, я Вам благодарен!

Slaviation

ЦитироватьИногда в процессах запускается второй компас. Если возникает такая ошибка. Нужно его прибить в ручную.
Добрый день.
Такое обычно случается, если КОМПАС открыт от имени одного пользователя, а макрос запускается от имени другого.