Сообщество программистов Autodesk в СНГ

ADN Club => AutoCAD .NET API => Тема начата: Akkella от 08-12-2018, 21:59:16

Название: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 08-12-2018, 21:59:16
Здравствуйте, переношу программу с vba на vb.net. При обращении к именам из AcSmComponents21.tlb (например AcSmSheetSetMgr) выдает ошибку
для x86 System.Runtime.InteropServices.COMException: "Не удалось получить фабрику класса COM для компонента с CLSID {1BDC8922-FDEB-40DE-A51E-8C4B44569F42} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).",
для x64 System.IO.FileNotFoundException: "Не удалось получить фабрику класса COM для компонента с CLSID {1BDC8922-FDEB-40DE-A51E-8C4B44569F42} из-за следующей ошибки: 8007007e Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)."
Автокад 2017 х64, VS 2017, win 10 x64. Подскажите в чем может быть проблема

Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Александр Ривилис от 08-12-2018, 22:09:55
выдает ошибку для x86
Автокад 2017 х64, VS 2017, win 10 x64.
Ответ выделен.
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 08-12-2018, 22:13:34
Ответ выделен.
для х64 тоже ошибку выдает
для x64 System.IO.FileNotFoundException: "Не удалось получить фабрику класса COM для компонента с CLSID {1BDC8922-FDEB-40DE-A51E-8C4B44569F42} из-за следующей ошибки: 8007007e Не найден указанный модуль. (Исключение из HRESULT: 0x8007007E)."
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Александр Ривилис от 08-12-2018, 22:20:41
Ну тогда видимо эти компоненты у тебя неправильно зарегистрированы в системе.
Проверь наличие в реестре:
Код - Microsoft Registry [Выбрать]
  1. REGEDIT4
  2.  
  3. [HKEY_CLASSES_ROOT\CLSID\{1BDC8922-FDEB-40DE-A51E-8C4B44569F42}]
  4. @="AcSmSheetSetMgr"
  5.  
  6. [HKEY_CLASSES_ROOT\CLSID\{1BDC8922-FDEB-40DE-A51E-8C4B44569F42}\InProcServer32]
  7. @="AcSmComponents.dll"
  8. "ThreadingModel"="Apartment"
  9.  
  10. [HKEY_CLASSES_ROOT\CLSID\{1BDC8922-FDEB-40DE-A51E-8C4B44569F42}\ProgID]
  11. @="AcSmComponents.AcSmSheetSetMgr.21"
  12.  
  13. [HKEY_CLASSES_ROOT\CLSID\{1BDC8922-FDEB-40DE-A51E-8C4B44569F42}\Programmable]
  14. @=""
  15.  
  16. [HKEY_CLASSES_ROOT\CLSID\{1BDC8922-FDEB-40DE-A51E-8C4B44569F42}\TypeLib]
  17. @="{AA0F32F6-E7D0-44C3-BF90-2C2CC3220C1F}"
  18.  
  19.  

Это всё ссылается на файл AcSmComponents.dll, который находится в каталоге с AutoCAD. Если ты делаешь своё приложение, которое грузится внутрь AutoCAD, то этот файл должен нормально находиться. Внешнее приложение с этим файлом работать не может, так как он имеет зависимости с самим AutoCAD.
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 08-12-2018, 22:59:19
Реестр совпадает. То есть с подшивками нет возможности работать из внешнего приложения? Или надо как то подключатся к этой библиотеке через автокад?
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Александр Ривилис от 08-12-2018, 23:02:17
То есть с подшивками нет возможности работать из стороннего приложения?
Через AcSmComponents категорически нет. Прочти тему и ответ сотрудника ADN DevHelp: https://forums.autodesk.com/t5/net/external-access-to-dst-file/td-p/3135796
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 08-12-2018, 23:34:20
А vba не как внешнее приложение считается? Оно же вроде через ActiveX к автокаду обращается.
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Александр Ривилис от 08-12-2018, 23:37:31
VBA работает внутри AutoCAD.
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 08-12-2018, 23:41:00
Спасибо
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: trir от 09-12-2018, 00:00:06
Цитировать
То есть с подшивками нет возможности работать из внешнего приложения?
подшивка это просто xml-файл... почти (https://github.com/triroakenshield/SheetSetManager)
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 09-12-2018, 13:18:42
Цитировать
То есть с подшивками нет возможности работать из внешнего приложения?
подшивка это просто xml-файл... почти (https://github.com/triroakenshield/SheetSetManager)

Спасибо, правда эта библиотека упорно не хочет работать
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: trir от 09-12-2018, 17:42:49
Цитировать
правда эта библиотека упорно не хочет работать
что пишет?
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 09-12-2018, 18:47:23
что пишет?

Необработанное исключение: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в SheetSetManager.CustomPropertyBag..ctor(XmlElement nParent) в D:\1\SheetSetManager-master\CustomPropertyBag.cs:строка 17
   в SheetSetManager.Sheet..ctor(XmlElement nParent) в D:\1\SheetSetManager-master\Sheet.cs:строка 19
   в SheetSetManager.SheetSetListener..ctor(String nfilename) в D:\1\SheetSetManager-master\SheetSetListener.cs:строка 29
   в Project6.Module1.SheetSetTest() в C:\Users\akkel\source\repos\Project6\Project6\Module1.vb:строка 721
   в Project6.Form1.Form1_Load(Object sender, EventArgs e) в C:\Users\akkel\source\repos\Project6\Project6\Form1.vb:строка 13

Обращался к библиотеке Dim wListener As New SheetSetListener("D:\тест\Ramka.dst")
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: trir от 10-12-2018, 07:29:05
исправил
если что, всегда можно сделать так:
Код - C# [Выбрать]
  1. AcSmXml doc = new AcSmXml();
  2. doc.LoadFromDstFile(nfilename);
и получить подшивку как xml
Название: Re: Не удалось получить фабрику класса COM для компонента
Отправлено: Akkella от 10-12-2018, 19:25:23
исправил
Спасибо