x64机器上出现“未注册的类”错误

3
我在将应用程序部署到Win7 x64机器时遇到了问题。我引用了一些旧的32位dll,无法重新编译为x64。我的开发机器是x86,所以它们在这里可以正常工作。在所有运行x64的客户端机器上,我都会收到以下消息:
“Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)) at System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid, Object >punkOuter, Int32 context, Guid& iid) at System.Windows.Forms.AxHost.CreateWithLicense(String license, Guid clsid)”
我尝试在Visual Studio 2010中将所有目标平台更改为x86,但没有用。我还尝试在客户端机器上使用“AppdData\Local\Apps\2.0...”安装文件夹内的regsvr32注册dll,但是每个引用的dll都会出现错误:“模块“Module.dll”已加载,但未找到DllRegisterServer入口点。”甚至尝试使用一个干净的x64机器也不行。
这些是冲突的dll(与Lead Tools多媒体库相关):
AxInterop.LTMMLib.dll AxInterop.MSComctlLib.dll AxInterop.MSComDlg.dll
(与Windows Media Player WinForms控件相关):
AxInterop.WMPLib.dll
我在线上查找了很多解决方案,但似乎都不起作用。非常感谢您的任何帮助。

1
当系统中没有安装Windows Media Player时,我在一些AxInterop方面也遇到了这个问题。如果你想知道,Xp、Vista和7都有“N”版本,没有安装Windows Media Player。在这种情况下,您需要下载并安装它到系统中,然后一切都可以正常工作。 - Akku
2
FYI:媒体播放器下载通常很难找到,这里有一个:http://www.chip.de/downloads/Windows-Media-Player_13001267.html ...也可能是WMP中缺少了此编解码器更新:https://www.microsoft.com/en-us/download/confirmation.aspx?id=6191 ...在我的应用程序中,我需要安装一些编解码器,并且刚刚安装了最新版本的K-Lite-Codec Pack。希望这可以帮助您,不知道这是否是您的问题。 - Akku
2
AxInterop文件不应该被注册。您正在使用可能未在目标机器上安装的ActiveX控件。LTMMLib来自Lead Technologies,请使用供应商推荐的安装程序。MSComctlLib和MSComDlg是古老的VB6控件,最好完全停止使用它们,并用执行相同功能的.NET类替换它们。WMPLib不会有问题。 - Hans Passant
...在System.Windows.Forms.UnsafeNativeMethods.CoCreateInstance(Guid& clsid...)中,您需要找出它失败的clsid值。 - Roman R.
1个回答

2
正如评论中指出的那样,Windows媒体库不是问题的根源。遵循Hans Passant的建议,在客户端计算机上手动安装了LEADTools(x86),问题得到解决。
感谢大家提供的有用评论。我不能将评论标记为答案,但以下是引用:
AxInterop文件不应该被注册。您正在使用可能未在目标计算机上安装的ActiveX控件。LTMMLib来自Lead Technologies,请使用供应商推荐的安装程序。MSComctlLib和MSComDlg是古老的VB6控件,最好完全停止使用它们,并用执行相同功能的.NET类替换。WMPLib不会成为问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接