2014-04-17 202 views
1

我有一个32位编译的DLL包含vb6代码。在我的以前的操作系统,这是Windows 7 64位,我能够注册和运行这个DLL在我的C#应用​​程序罚款。现在,运行Windows 8.1,当我尝试注册同一个DLL,它注册的,但当我尝试读取DLL在我的代码,我得到:Windows 7 64位dll注册与Windows 8.1 64位dll注册

Retrieving the COM class factory for component with CLSID {D19A00C4-A7F9-4E14-A5E1-D060B7EB57F3} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).

  1. 32位的DLL(编译为Interop.VB6Class)用于针对x86构建的ac#类 。

  2. 我试图从我的64位的文件夹都regasm和32位的文件夹,没有运气

  3. 当我运行的Dependency Walker(一个可爱的小应用程序,检查是否所有的DLL的依赖可用,并且您的CPU版本对于dll及其依赖项匹配),我仍然收到消息“找到了具有不同CPU的模块”。

我遵循了无数的链接和建议,所以如果任何人都可以帮助我,我会接受你作为我的救星,永远称你为国王。

+0

你用什么工具来注册这个VB6 DLL - ''regasm'或'regsvr32'?此外,请不要使用/ i参数只是'C:\ Windows \ SysWow64 \ regsvr32.exe my.dll' – wqw

+0

我已经尝试过regsvr32和regasm。我没有使用任何参数,只是对syswow64文件夹的cd命令 –

+0

“Command Prompt(Admin)”中的所有这些?这是提升的命令提示符? – wqw

回答

0

只是一个建议,但你100%确定你的项目设置是正确的。您的平台目标应该是x86,并且应选择首选32位复选框。你还运行调试版本还是发布版本?您需要为两种环境设置32位设置。对于命令行版本,请输出以下内容以确保您的环境是正确的。

Console.WriteLine("OS {0}, Process {1}", System.Environment.Is64BitOperatingSystem, System.Environment.Is64BitProcess); 

我知道这是一个长镜头,但它可能有助于找出问题的根本原因。

+0

主要应用程序和它使用的所有dll都是为32位构建的,因为客户端机器都运行在32位上。我已经解决了正常的Windows 7虚拟机的问题,因为8.1不仅在Visual Studio中提供了各种问题,而且还提供了eclipse。 (还是)感谢你的建议。 –

相关问题