将32位COM DLL注册到64位Windows 7

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文件夹。 然后,我以管理员身份打开命令提示符。 我写regsvr32 huginalpha.dll并执行此命令。 但是我得到了错误。 我能做什么?


问题可能是您尝试使用64位版本的regsvr32注册32位库。请参阅此知识库文章-您需要从Windows \ SysWOW64运行regsvr32(用于32位库)。


对于Windows 64位平台中的32位DLLS:

  • 将what.dll复制到c:\\windows\\sysWOW64\\
  • 以管理员身份打开CMD提示符(非常重要)
  • 在CMD窗口中:

  • CD c:\\windows\\sysWOW64\\
  • regsvr32 whatever.dll
  • 然后,您将在32位dll上执行32位regsvr(c:\\windows\\sysWOW64\
    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复制到c:\\windows\\system32
    在"运行"菜单中键入cmd,它将搜索cmd.exe,右键单击并单击Run as Administrator

    它将在c:\\windows\\system32上显示提示

    类型

    regsvr32 ocxname.ocx注册.ocx

    要么

    键入regsvr32 dllname.dll来注册.dll


    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
      2
      C:\\Windows\\Microsoft.NET\\Framework\\v2.0.50727\
      egAsm.exe D:\\DemoIconOverlaySln\\Demo\\bin\\Debug\\HandleOverlayWarning\\AsmOverlayIconWarning.dll /codebase
    • 64位

      1
      2
      C:\\Windows\\Microsoft.NET\\Framework64\\v2.0.50727\
      egAsm.exe D:\\DemoIconOverlaySln\\Demo\\bin\\Debug\\HandleOverlayWarning\\AsmOverlayIconWarning.dll /codebase


    如果无法解决问题,请在使用SysWoW64版本的regsvr32时,确保所有库依赖项都具有相同的体系结构。例如,当

    regsvr32 lib_x86.dll无法注册库,并且
    %SystemRoot%\\SysWow64\
    egsvr32 lib_x86
    也失败,请尝试将lib_x86加载到Dependency Walker应用程序以查看整个依赖项列表。如果任何项目具有64位体系结构,这是regsvr32无法加载32位库的原因。


    将dll放在system32或syswow32目录中,并使用适当的regsvr32进行注册。
    感到奇怪的是,即使它无法注册错误,我也重新启动了WIN 7 64,而我的vb应用程序也很好地加载了dll!