Не удалось получить фабрику классов COM для компонента с CLSID {6C9E80E3-B780-4361-A693-5E5C6BDC83A9} из-за следующей ошибки: 80040154

Я получаю следующую ошибку:
Не удалось получить фабрику классов COM для компонента с CLSID {6C9E80E3-B780-4361-A693-5E5C6BDC83A9} из-за следующей ошибки: 80040154.

Dim smgrGlobal As QBSessionManager
smgrGlobal = New QBSessionManagerClass()

Во второй строке ошибка.
Я получаю эту ошибку только с QB2013 и QBFC12. Этого не происходит ни с одной из предыдущих версий.
Насколько я могу найти, эта ошибка связана с тем, что приложение не скомпилировано для x86 (если вместо этого использовался «Любой процессор»). Однако я установил свое приложение компилировать для x86 НЕ "Любой процессор", и я все еще получаю эту ошибку.


person Casey Barsness    schedule 22.02.2013    source источник
comment
stackoverflow.com/a/2123678/62576 содержит объяснение, которое вы, возможно, захотите уточнить (проверьте, класс действительно зарегистрирован). Другой причиной этого является создание 64-разрядного приложения, которое пытается использовать 32-разрядный ActiveX (или 32-разрядное приложение, пытающееся загрузить 64-разрядный ActiveX).   -  person Ken White    schedule 23.02.2013


Ответы (3)


Ошибка COM 0x80040154 буквально означает «класс не зарегистрирован». Упомянутый «класс» — это класс COM для компонента, экземпляр которого вы пытаетесь создать. Вот причины, по которым вы можете получить эту ошибку:

  1. Как вы заметили, если вы создадите свое приложение с «x64» или «любой процессор» вместо «x86», вы увидите эту проблему. Это связано с тем, что 32-разрядные процессы используют другой куст реестра, чем 64-разрядные процессы, а в реестре хранится информация о регистрации COM-класса.
  2. Вы неправильно установили QBFC на текущем локальном компьютере. Какую бы версию QBFC вы не использовали для разработки своего приложения, вы должны установить одну и ту же версию QBFC на каждый компьютер, на котором работает ваше приложение. Если вы этого не сделаете, вам может повезти, потому что кто-то другой установил правильную версию, но в конечном итоге вы увидите эту проблему. Подчеркну: QBFC не устанавливается вместе с QuickBooks по умолчанию.
  3. (менее вероятно, но возможно) Каким-то образом регистрационная информация COM для QBFC была повреждена. Эту проблему можно решить, переустановив правильную версию QBFC.
person Paul Keister    schedule 28.02.2013

Если переход на X86 не работает, попробуйте следующее: Я использую версию 13, может работать и для других версий Установите QBFC13_0Installer.exe Убедитесь, что вы сначала установили SDK В моей системе он находится в папке: C:\Program Files(x86)\ Intuit\IDN\QBSDK13.0\tools\installers

У меня есть два идентичных Surface Pro 3 с Windows 10. Использование идентичной копии кода в одной системе скомпилировано и работает нормально. С другой стороны, я бы получил ужасную ошибку класса. После долгих поисков и не найдя решения, я начал просто делать удары в темноте, и этот конкретный удар решил проблему.

person Phil    schedule 26.09.2015

У меня похожая проблема с QB POS 2013.

Я получаю эту ошибку при запуске приложения с учетными данными администратора - когда я запускаю приложение под текущим пользователем, все в порядке. Причиной этой ошибки может быть проблема в установщике QBFC (или модуле слияния) — оба установщика записывают идентификатор класса компонента COM в ветке реестра текущего пользователя (HKCU), а не в ветке локального компьютера (HKLM). Таким образом, когда вы запускаете свое приложение не под текущим пользователем (администратором или другим пользователем), приложение не может найти идентификатор компонента COM.

Кроме того, штатный QB XML (Interop.QBPOSXMLRPLIB) корректно устанавливается и успешно запускается под всеми пользователями.

См. аналогичное обсуждение здесь - Как компонент COM может быть зарегистрирован на полпути? < /а>.

person Dmitry Kutetsky    schedule 27.08.2013