2010-08-09 2 views
29

У меня есть 32-битная COM-компонента DLL, и эта DLL написана в Delphi. Это Win32 DLL. Я хочу использовать эту DLL в проекте Visual C# на платформе .NET.Зарегистрировать 32-битную COM-DLL до 64 бит Windows 7

Я не могу добавить ссылку на эту DLL в проекте. я пытаюсь зарегистрировать его в командной строке от имени администратора в Windows 7 64 бит, но я получаю эту ошибку:

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

Сначала я положил файл DLL в Windows/system32. Затем я открываю командную строку как администратор. Я пишу regsvr32 huginalpha.dll и выполняю эту команду. Но я получаю ошибку. что я могу сделать?

+0

см. это сообщение о ошибке 0x8007000B http://stackoverflow.com/questions/18007967/net-framework-error-hresult-0x8007000b/36353971#36353971 – JinSnow

ответ

50

Проблема, скорее всего, вы попытаетесь зарегистрировать 32-разрядную библиотеку с 64-разрядной версией regsvr32. See this KB article - вам нужно запустить regsvr32 из windows \ SysWOW64 для 32-битных библиотек.

+8

+1, действительно. И эта DLL должна * не * быть сохранена в c: \ windows \ system32 либо, это для 64-битных компонентов. –

+0

Правильно, поэтому файл с именем 32 на самом деле является 64-битным, а 32-разрядная версия находится в каталоге WOW64. – aaa90210

0

введите dll в системный каталог 32 или syswow32 и используйте соответствующий regsvr32 для его регистрации. зашифровал, что даже если он дал не зарегистрировать ошибку, я перезагрузил свой WIN 7 64, и мое приложение vb загрузило dll просто отлично !!

0

Если проблема не устранена, при использовании версии regsvr32 SysWoW64 убедитесь, что все зависимости библиотеки имеют одинаковые архетинты. Например, когда

regsvr32 lib_x86.dll не удается зарегистрировать библиотеку, и %SystemRoot%\SysWow64\regsvr32 lib_x86 также не удается, попытайтесь загрузить lib_x86 приложению Dependency Walker, чтобы увидеть весь список зависимостей. Если какой-либо предмет имеет 64-разрядную архетеку, вот почему, почему regsvr32 не загружает 32-битную библиотеку.

26

для 32-битных библиотек DLL в ОС Windows 64-битных платформ:

  1. Копировать whatever.dll до c:\windows\sysWOW64\
  2. Открыть ЦМД строку в качестве администратора (очень важно)

В окне CMD:

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

Вам будет выполнение 32-битную REGSVR (c:\windows\sysWOW64\regsvr.exe) на DLL в 32 битном

+3

+1 Ваше внимание к точке запуска, поскольку администратор спас мою жизнь! :) – bluish

+2

Если вы не запустили администратор, он скажет, что установка прошла успешно, но она не будет зарегистрирована. Никакой другой обратной связи вы не получите (дайте вам, Microsoft!). – neves

-1

Попробуйте запустить его на Framework64.

Пример:

  • 32 бит

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

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

Этот (regasm.exe) предназначен только для сборщиков .NET. –

+0

Хорошо. Я ответил на вопрос, важно, чтобы вы понимали уровень. NET как –

2

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

Извлечение фабрики COM-класса для компонента с CLSID {...} не удалось из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

если вы попробуете это;

C: \ Windows \ system32 \ regsvr32.exe < имя файла> .dll

вы все еще можете принять это исключение. поэтому расширенные настройки IIS-пула, Включить 32-битное приложение: true;)

+0

IIS-> pool Дополнительные настройки, Включить 32-разрядное приложение: true, это действительно решило проблему. +1 для него. –

3

Я верю, теперь все изменилось. On My Win 2008 R2 Box, я смог зарегистрировать 32-битную dll с 64-битным regsvr32, поскольку 64-битная версия может обнаружить целевую битность и создать новую 32-битную regsvr32 из% SYSWOW% папки.

См: Registering a 32 bit DLL with 64 bit regsvr32

+0

'regsvr32' долгое время работал над проблемами биения, я полагаю, с самого начала. Если вы зарегистрируете 32-битную DLL с 64-битным 'regsvr32', последний обнаруживает проблему и запускает внутреннюю 32-битную версию' regsvr32' и пересылает туда регистрацию. Это хорошо работает и в обратном направлении. –

+0

@RomanR .: Я бы догадался, но, увидев этот вопрос SO и статью KB support.microsoft.com/kb/282747, это заставило бы меня задуматься. – Abhijit

0

я получаю сообщение об ошибке «Модуль может совместимы с этой версией Windows» для обеих версий RegSvr32 (32 бит и 64 бит). Я пытался зарегистрировать DLL, созданную для XP (32 бит) в Server 2008 R2 (x64), и ни одна из резолюций Regsr32 не работала для меня. Однако регистрация сборки в соответствующей .Net работала идеально для меня. C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm.exe

1

Чтобы зарегистрировать comm .dll или .ocx в Windows 7 32-bit, выполните следующие действия :

Копировать .dll или .ocx в c:\windows\system32 Тип ЦМД в меню Run, он будет искать cmd.exe правой кнопкой мыши и выберите Run as Administrator

он покажет приглашение на c:\windows\system32

Тип

regsvr32 ocxname.ocx зарегистрировать .ocx

или

типа regsvr32 dllname.dll зарегистрировать.dll

+0

для xp также проверено –

Смежные вопросы