Register 32 bit COM DLL to 64 bit Windows 7
我有一个32位COM组件DLL,并且该DLL是用Delphi编写的。
这是一个Win32 DLL。
我想在.NET平台上的Visual C#项目中使用此DLL。
我无法在项目中添加对此DLL的引用。
我尝试在Windows 7 64位系统的命令提示符下将其注册为Administrator,但出现此错误:
Check if the module is compatible with an x86 (32-bit) or x64 (64-bit) version of regsvr32.exe.
首先,我将DLL文件放入Windows / system32文件夹。 然后,我以管理员身份打开命令提示符。 我写
问题可能是您尝试使用64位版本的regsvr32注册32位库。请参阅此知识库文章-您需要从Windows \ SysWOW64运行regsvr32(用于32位库)。
对于Windows 64位平台中的32位DLLS:
在CMD窗口中:
然后,您将在32位dll上执行32位regsvr(
egsvr.exe
我相信,现在情况已经改变。在My Win 2008 R2 Box上,我能够用64位regsvr32注册一个32位dll,因为64位版本可以检测目标位并从%SYSWOW%文件夹中生成一个新的32位regsvr32。
参考:使用64位regsvr32注册32位DLL
要在32位Windows 7上注册comm .dll或.ocx,请执行以下操作:
将.dll或.ocx复制到
在"运行"菜单中键入cmd,它将搜索cmd.exe,右键单击并单击
它将在
类型
要么
键入
http://onerkaya.blogspot.com/2013/03/register-com-dll-on-windows-64-bit.html
由于以下错误,无法为具有CLSID {...}的组件检索COM类工厂:80040154未注册类(HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。
如果你尝试这个;
c:\ windows \ system32 \ regsvr32.exe <文件名> .dll
您仍然可以接受此例外。因此IIS-pool高级设置,启用32位应用程序:true;)
下面的链接保存了一天
https://msdn.microsoft.com/zh-CN/library/ms229076(VS.80).aspx
使用上面链接中指定的相关RegSvc
c:\ Windows \ Microsoft。 NET \ Framework \ v4.0.30319 \ regSvcs.exe .... \ Shared \ Your.dll /tlb:Your.tlb
对于两个版本的RegSvr32(32位和64位),我都收到错误消息"模块可能与此版本的Windows兼容"。我试图在Server 2008 R2(x64)中注册为XP(32位)构建的DLL,但没有Regsr32分辨率对我有用。但是,在适当的.Net中注册程序集对我来说很完美。
C:\ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ regAsm.exe
尝试在Framework64上运行它。
例:
-
32位
1
2C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\
egAsm.exe D:\\DemoIconOverlaySln\\Demo\\bin\\Debug\\HandleOverlayWarning\\AsmOverlayIconWarning.dll /codebase -
64位
1
2C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\
egAsm.exe D:\\DemoIconOverlaySln\\Demo\\bin\\Debug\\HandleOverlayWarning\\AsmOverlayIconWarning.dll /codebase
如果无法解决问题,请在使用SysWoW64版本的regsvr32时,确保所有库依赖项都具有相同的体系结构。例如,当
egsvr32 lib_x86
将dll放在system32或syswow32目录中,并使用适当的regsvr32进行注册。
感到奇怪的是,即使它无法注册错误,我也重新启动了WIN 7 64,而我的vb应用程序也很好地加载了dll!