Error al recuperar el generador de clases COM para el componente con CLSID {XXXX} debido al siguiente error: 80040154

Resuelto gopal asked hace 15 años • 18 respuestas

Desarrollé un servicio de Windows usando C#.NET para generar informes en PDF. Para generar un archivo PDF estoy usando una DLL de terceros. La aplicación se ejecuta en mi plataforma Windows XP. Cuando implementé el servicio en la versión de 64 bits de Windows Server 2008 , recibí este error:

Error al recuperar el generador de clases COM para el componente con CLSID {46521B1F-0A5B-4871-A4C2-FD5C9276F4C6} debido al siguiente error: 80040154.

Registré la DLL usando el comando regsvr32. Puedo ver este CLSID en el registro. Pero el problema persiste.

¿Cual podría ser el problema?

gopal avatar Jun 24 '09 14:06 gopal
Aceptado

En VS - propiedades del proyecto - en la pestaña Construir - destino de plataforma =X86

Fabrice MARIANADIN avatar May 23 '2010 16:05 Fabrice MARIANADIN

Parece que su servicio se creó con 'Cualquier CPU', lo que le provoca errores en 64 bits cuando utiliza componentes COM. Necesitas construirlo para x86.

Probablemente el sitio web se esté ejecutando como un proceso de 32 bits, por lo que puede utilizar el componente. Construir su solución x86obligará a su servicio a ejecutarse en 32 bits.

stevehipwell avatar Jun 24 '2009 08:06 stevehipwell

Si está buscando una manera de hacer que esto funcione sin tener que volver a compilar su aplicación Any CPU, aquí tiene otra posible solución:

  1. Localice el GUID de su objeto COM en HKey_Classes_Root\Wow6432Node\CLSID\{GUID}
  2. Una vez ubicado, agregue un nuevo valor REG_SZ (cadena). El nombre debe ser AppID y los datos deben ser el mismo GUID del objeto COM que acaba de buscar
  3. Agregue una nueva clave en HKey_Classes_Root\Wow6432Node\AppID. La nueva clave debe llamarse igual que el GUID del objeto COM.
  4. Debajo de la nueva clave que acaba de agregar, agregue un nuevo valor de cadena y llámelo DllSurrogate. Deje el valor vacío.
  5. Cree una nueva clave en HKey_Local_Machine\Software\Classes\AppID\ Nuevamente, la nueva clave debe llamarse igual que el GUID del objeto COM. No es necesario agregar valores bajo esta clave.

No me atribuyo ningún mérito por la solución, pero funcionó para nosotros. Consulte el enlace de la fuente para obtener más información y otros comentarios.

Fuente: https://techtalk.gfi.com/32bit-object-64bit-environment/

Joshua Starner avatar Jan 11 '2013 19:01 Joshua Starner