2010-08-09 19 views
29

Tengo una DLL de componente COM de 32 bits y esta DLL está escrita en Delphi. Es una DLL Win32. Quiero utilizar esta DLL en mi proyecto de Visual C# en la plataforma .NET.Registrar DLL COM de 32 bits en Windows 7 de 64 bits

No puedo agregar referencia a esta DLL en el proyecto. trato de registrarlo en el símbolo del sistema como administrador en Windows 7 64 bits, pero me sale este error:

Check if the module is compatible with an x86 (32-bit) or x64 (64-bit) version of regsvr32.exe.

Primero me puso archivo DLL en la carpeta windows/system32. Luego abro Command Prompt como administrador. Escribo regsvr32 huginalpha.dll y ejecuto este comando. Pero obtengo el error. ¿que puedo hacer?

+0

ver este post sobre el error 0x8007000B http://stackoverflow.com/questions/18007967/net-framework-error-hresult-0x8007000b/36353971#36353971 – JinSnow

Respuesta

50

Es probable que intente registrar una biblioteca de 32 bits con la versión de 64 bits de regsvr32. See this KB article - necesita ejecutar regsvr32 desde Windows \ SysWOW64 para las bibliotecas de 32 bits.

+8

1, en verdad. Y esa DLL no * debe * ser almacenada en c: \ windows \ system32 tampoco, eso es para componentes de 64 bits. –

+0

Correcto, entonces el archivo llamado 32 es realmente de 64 bits, y la versión de 32 bits se encuentra en un directorio llamado WOW64. – aaa90210

0

pon el dll en el directorio system32 o syswow32, y usa el regsvr32 apropiado para registrarlo. wiered que a pesar de que dio error al registrar el error, reinicié mi WIN 7 64 Y mi aplicación vb cargó el dll muy bien !!

0

Si no se resuelve el problema, al usar la versión SysWoW64 de regsvr32, asegúrese de que todas las dependencias de la biblioteca tengan la misma arquitectura. Por ejemplo, cuando

regsvr32 lib_x86.dll no puede registrar la biblioteca, y %SystemRoot%\SysWow64\regsvr32 lib_x86 falla también, intenta cargar lib_x86 a la aplicación Dependency Walker para ver toda la lista de dependencias. Si algún elemento tiene archetecture de 64 bits, este es el motivo por el cual regsvr32 no puede cargar la biblioteca de 32 bits.

26

Durante 32 DLLS bits en plataformas de Windows de 64 bits:

  1. Copia whatever.dll a c:\windows\sysWOW64\
  2. Abra un símbolo del CMD como administrador (muy importante)

En la ventana de CMD:

  1. CD c:\windows\sysWOW64\
  2. regsvr32 whatever.dll

A continuación, estará ejecutando el regsvr de 32 bits (c:\windows\sysWOW64\regsvr.exe) en un DLL de 32 bits

+3

+1 ¡Su énfasis en el punto de correr como administrador me salvó la vida! :) – bluish

+2

Si no se ejecuta como administrador, dirá que la instalación fue exitosa, pero no se registrará. No recibirá ningún otro comentario (¡represéntelo, Microsoft!). – neves

-1

intento ejecutarlo en Framework64.

Ejemplo:

  • 32 bit

    C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe D:\DemoIconOverlaySln\Demo\bin\Debug\HandleOverlayWarning\AsmOverlayIconWarning.dll /codebase 
    
  • 64 bit

    C:\Windows\Microsoft.NET\Framework64\v2.0.50727\RegAsm.exe D:\DemoIconOverlaySln\Demo\bin\Debug\HandleOverlayWarning\AsmOverlayIconWarning.dll /codebase 
    
+0

Esto (regasm.exe) es solo para ensamblados .NET. –

+0

Ok. Respondí la pregunta, importante que entiendas el nivel. NET ensambla cómo –

2

http://onerkaya.blogspot.com/2013/03/register-com-dll-on-windows-64-bit.html

Se produjo un error al recuperar la fábrica de la clase COM para el componente con CLSID {...} debido al siguiente error: 80040154 Clase no registrada (Excepción de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

si intenta esto;

C: \ Windows \ System32 \ regsvr32.exe < nombre del archivo> .dll

todavía se puede aprovechar esta excepción. Configuración avanzada de la piscina por lo IIS-, permitir la aplicación de 32 bits: true;)

+0

IIS-> piscina Configuración avanzada, habilite la aplicación de 32 bits: cierto esto realmente resolvió el problema. +1 por eso. –

3

creo, las cosas han cambiado ahora. En Mi Win 2008 R2 Box, pude registrar un dll de 32 bits con un regsvr32 de 64 bits, ya que la versión de 64 bits puede detectar el bitness objetivo y generar un nuevo regsvr32 de 32 bits de la carpeta% SYSWOW%.

Consulte: Registering a 32 bit DLL with 64 bit regsvr32

+0

'regsvr32' ha estado trabajando en problemas de bitness durante mucho tiempo, supongo desde el principio. Si está registrando una DLL de 32 bits con 'regsvr32' de 64 bits, este último detecta el problema y comienza internamente la versión de 32 bits de' regsvr32' y reenvía el registro allí. Esto funciona bien en la dirección opuesta también. –

+0

@RomanR .: Hubiera supuesto que al ver esta pregunta ASÍ y el artículo KB support.microsoft.com/kb/282747, esto me haría pensar. – Abhijit

0

que estaba recibiendo el error "El módulo puede compatible con esta versión de Windows", tanto para la versión de RegSvr32 (32 bits y 64 bits). Estaba tratando de registrar una DLL creada para XP (32 bit) en Server 2008 R2 (x64) y ninguna de las resoluciones de Regsr32 funcionó para mí. Sin embargo, registrar el ensamblado en el .Net apropiado funcionó perfecto para mí. C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ RegAsm.exe

1

Para registrar un comm .dll o .ocx en Windows 7 de 32 bits, haga lo siguiente :

Copia .dll o .ocx a c:\windows\system32 Escriba cmd en el menú Ejecutar, buscará cmd.exe, haga clic derecho y haga clic en Run as Administrator

se mostrará un aviso en c:\windows\system32

Tipo

regsvr32 ocxname.ocx para registrar .ocx

o

tipo regsvr32 dllname.dll registrar.DLL

+0

para xp también probado –

Cuestiones relacionadas