Register 32 bit COM DLL to 64 bit Windows 7
I have a 32 bit COM component DLL and this DLL is written in Delphi. It's a Win32 DLL. I want to 开发者_如何学JAVAuse this DLL in my Visual C# project on .NET platform.
I can't add reference to this DLL in the project. I try to register it in Command Prompt as Administrator in Windows 7 64 bit, but I get this error:
Check if the module is compatible with an x86 (32-bit) or x64 (64-bit) version of regsvr32.exe.
First I put DLL file to windows/system32 folder. Then I open Command Prompt as Administrator. I write regsvr32 huginalpha.dll
and execute this command. But I get the error. what can I do?
The problem is likely you try to register a 32-bit library with 64-bit version of regsvr32. See this KB article - you need to run regsvr32 from windows\SysWOW64 for 32-bit libraries.
For 32 bit DLLS in Windows 64 bit platforms:
- Copy whatever.dll to
c:\windows\sysWOW64\
- Open a CMD prompt AS ADMINISTRATOR (very important)
In the CMD window:
CD c:\windows\sysWOW64\
regsvr32 whatever.dll
You will then be executing the 32-bit regsvr (c:\windows\sysWOW64\regsvr.exe
) on a 32 bit dll
I believe, things have changed now. On My Win 2008 R2 Box, I was able to register a 32 bit dll with a 64 bit regsvr32 as the 64 bit version can detect the target bitness and spawn a new 32 bit regsvr32 from %SYSWOW% folder.
Refer: Registering a 32 bit DLL with 64 bit regsvr32
http://onerkaya.blogspot.com/2013/03/register-com-dll-on-windows-64-bit.html
Retrieving the COM class factory for component with CLSID {...} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
if you try this;
c:\windows\system32\regsvr32.exe < filename >.dll
you can still take this exception. so IIS- pool Advanced settings, Enable 32 bit application : true ;)
To register a comm .dll or .ocx on Windows 7 32-bit, do the following:
Copy .dll or .ocx to c:\windows\system32
Type cmd in Run menu, it will search cmd.exe, right click and click Run as Administrator
It will show a prompt at c:\windows\system32
Type
regsvr32 ocxname.ocx
to register .ocx
or
type regsvr32 dllname.dll
to register .dll
put the dll in system32 or syswow32 directory, and use appropriate regsvr32 to register it. wiered that even though it gave failed to register error, I rebooted my WIN 7 64 AND my vb app loaded the dll just fine!!
If problem not resolved, when using SysWoW64 version of regsvr32, make sure all library dependencies have same archetecture. For example, when
regsvr32 lib_x86.dll
fails to register library, and
%SystemRoot%\SysWow64\regsvr32 lib_x86
also fails, try to load lib_x86
to Dependency Walker application to see whole list of dependencies. If any item have 64-bit archetecture, here is the reason, why regsvr32
fails to load 32-bit library.
Try to run it at Framework64.
Example:
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
I was getting the error "The module may compatible with this version of windows" for both version of RegSvr32 (32 bit and 64 bit). I was trying to register a DLL that was built for XP (32 bit) in Server 2008 R2 (x64) and none of the Regsr32 resolutions worked for me. However, registering the assembly in the appropriate .Net worked perfect for me. C:\Windows\Microsoft.NET\Framework\v2.0.50727\RegAsm.exe
Below link saved the day
https://msdn.microsoft.com/en-us/library/ms229076(VS.80).aspx
use the relevant RegSvcs as specified in the above link
c:\Windows\Microsoft. NET\Framework\v4.0.30319\RegSvcs.exe ....\Shared\Your.dll /tlb:Your.tlb
精彩评论