2010-08-09 31 views
29

J'ai une DLL de composant COM 32 bits et cette DLL est écrite en Delphi. C'est une DLL Win32. Je souhaite utiliser cette DLL dans mon projet Visual C# sur la plate-forme .NET.Enregistrer 32 bits COM DLL à 64 bits Windows 7

Je ne peux pas ajouter de référence à cette DLL dans le projet. Je essayer de l'enregistrer dans l'invite de commande en tant qu'administrateur dans Windows 7 64 bits, mais je reçois cette erreur:

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

D'abord je mis fichier DLL pour Windows/system32. Ensuite, j'ouvre l'invite de commande en tant qu'administrateur. J'écris regsvr32 huginalpha.dll et exécute cette commande. Mais j'ai l'erreur. Que puis-je faire?

+0

voir cet article à propos de l'erreur 0x8007000B http://stackoverflow.com/questions/18007967/net-framework-error-hresult-0x8007000b/36353971#36353971 – JinSnow

Répondre

50

Le problème est probablement que vous essayez d'enregistrer une bibliothèque 32 bits avec la version 64 bits de regsvr32. See this KB article - vous devez exécuter regsvr32 à partir de windows \ SysWOW64 pour les bibliothèques 32 bits.

+8

+1, en effet. Et cette DLL ne doit pas * non * être stockée dans c: \ windows \ system32 non plus, c'est pour les composants 64 bits. –

+0

À droite, le fichier 32 est en fait 64 bits et la version 32 bits se trouve dans un répertoire appelé WOW64. – aaa90210

0

Placez la DLL dans le répertoire system32 ou syswow32 et utilisez regsvr32 approprié pour l'enregistrer. wiered que, même si cela a donné échoué à enregistrer l'erreur, j'ai redémarré mon WIN 7 64 ET mon application vb chargé de la DLL juste bien !!

0

Si le problème n'est pas résolu, lors de l'utilisation de la version SysWoW64 de regsvr32, assurez-vous que toutes les dépendances de bibliothèque ont la même archétecture. Par exemple, lorsque

regsvr32 lib_x86.dll ne parvient pas à inscrire la bibliothèque et %SystemRoot%\SysWow64\regsvr32 lib_x86 échoue aussi, essayez de charger lib_x86 à l'application Dependency Walker pour voir la liste entière des dépendances. Si un élément a une architecture de 64 bits, voici la raison pour laquelle regsvr32 ne parvient pas à charger la bibliothèque 32 bits.

26

Pour 32 bits DLL dans les plates-formes Windows 64 bits:

  1. Copie whatever.dll à c:\windows\sysWOW64\
  2. Ouvrez une invite CMD AS ADMINISTRATEUR (très important)

Dans la fenêtre CMD:

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

Vous serez alors l'exécution de la regsvr 32 bits (c:\windows\sysWOW64\regsvr.exe) sur une dll 32 bits

+3

+1 Votre stress sur le point de courir en tant qu'administrateur m'a sauvé la vie! :) – bluish

+2

Si vous ne courez pas en tant qu'administrateur, il dira que l'installation a réussi, mais elle ne sera pas enregistrée. Aucun autre commentaire que vous recevrez (vous damner, Microsoft!). – neves

-1

Essayez de l'exécuter à Framework64.

Exemple:

  • 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

Ceci (regasm.exe) est pour les assemblys .NET seulement. –

+0

Ok. J'ai répondu à la question, important que vous compreniez le niveau. Assemblages NET comment –

2

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

La récupération de la fabrique de classe COM pour le composant avec CLSID {...} a échoué en raison de l'erreur suivante: 80040154 Classe non enregistrée (Exception de HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

si vous essayez ceci;

c: \ windows \ system32 \ regsvr32.exe < nom de fichier> .dll

vous pouvez toujours profiter de cette exception. donc IIS-pool Advanced settings, Activer l'application 32 bits: true;)

+0

IIS-> pool Paramètres avancés, Activer l'application 32 bits: true cela a vraiment résolu le problème. +1 pour cela. –

3

Je crois que les choses ont changé maintenant. Sur Mon Win 2008 R2 Box, j'ai été en mesure d'enregistrer une DLL 32 bits avec un regsvr32 64 bits que la version 64 bits peut détecter le bitness cible et engendrer un nouveau regsvr32 32 bits du dossier% SYSWOW%.

Référez: Registering a 32 bit DLL with 64 bit regsvr32

+0

'regsvr32' a travaillé sur les problèmes de durée pendant longtemps, je suppose depuis le début. Si vous enregistrez une DLL 32 bits avec 'regsvr32' 64 bits, ce dernier détecte le problème et lance en interne la version 32 bits de' regsvr32' et y transfère l'enregistrement. Cela fonctionne bien dans la direction opposée aussi bien. –

+0

@RomanR .: Je l'aurais deviné mais en voyant cette question SO et l'article KB support.microsoft.com/kb/282747, cela me ferait réfléchir. – Abhijit

0

Je recevais l'erreur "Le module peut compatible avec cette version de Windows" pour les deux versions de RegSvr32 (32 bits et 64 bits). J'essayais d'enregistrer une DLL qui a été construite pour XP (32 bits) dans Server 2008 R2 (x64) et aucune des résolutions de Regsr32 n'a fonctionné pour moi. Cependant, l'enregistrement de l'assembly dans le .Net approprié a fonctionné parfaitement pour moi. C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ RegAsm.exe

1

Pour enregistrer un fichier .dll ou .ocx sur Windows 7 32 bits, procédez comme suit :

Copie .dll ou .ocx à c:\windows\system32 Tapez cmd dans le menu Exécuter, il recherche cmd.exe, faites un clic droit et cliquez sur Run as Administrator

il affichera une invite à c:\windows\system32

type

regsvr32 ocxname.ocx pour enregistrer .ocx

ou

Type regsvr32 dllname.dll à enregistrer.dll

+0

pour xp également testé –

Questions connexes