【问题标题】:.net dll instantiation on 32 and 64 bit machines.net dll 在 32 位和 64 位机器上的实例化
【发布时间】:2016-07-03 21:36:26
【问题描述】:

我不清楚何时可以在 64 位机器上的 Visual Studio(c# 或 vb)中引用 32 位 dll。

我现在正在尝试做一个(Interop.PDF2IMGOCXLib.dll 或只是 PDF2IMGOCXLib.dll),但出现错误消息:

检索具有 CLSID {66BBFF81-C832-411C-B81E-883C3A96CFD8} 的组件的 COM 类工厂失败,原因是以下错误:80040154 未注册类(HRESULT 异常:0x80040154 (REGDB_E_CLASSNOTREG))。

同样的代码在 32 位机器上也能工作。

这是一个 3rd 方 dll,所以我无法编辑它。

请纠正我的错误。我认为 Visual Studio 是一个 32 位应用程序,它允许引用 32 位和 64 位引用。

我已经尝试了几件事:

  1. 确保编译>32 位的平台设置为 (x86)。

  2. 注册了 dll(在很多地方),包括 wow64 文件夹。使用 regsvr32 注册它时会出现标准“模块 dllname 已加载但未找到入口点 dllregisterserver”的错误。用 Regasm 注册它。它说它工作得很好。

在 Visual Studio 中出现的引用错误发生在 declare 语句上

模块模块1

Sub Main()
    Dim x As New PDF2IMGOCXLib.Pdf2Img

    Return
End Sub

结束模块

那么,一般来说,什么时候可以在 64 位机器上的 Visual Studio 中使用 32 位 dll?

也许有关 dll 的某些内容仅适用于 32 位系统,但如果同时适用于 32 位和 64 位系统则不起作用。

有什么想法吗?

【问题讨论】:

  • 当您从一台机器移动到另一台机器时,通常不会移动的东西是安装在旧机器上的组件。这是此异常消息的根本原因。您可以从 SysInternals 的 Process Monitor 获得第二意见。您会看到您的应用程序正在搜索注册表,但没有找到密钥。与旧机器上的跟踪比较,使用 Regedit.exe 验证跟踪告诉您的内容

标签: c# visual-studio dll 64-bit 32-bit


【解决方案1】:
  1. %systemroot%\SysWoW64\regsvr32.exe 适用于win32
  2. systemroot%\System32\regsvr32.exe 适用于 x64
  3. 您应该使用 %systemroot%\SysWoW64\regsvr32.exe 而不是 %systemroot%\System32\regsvr32.exe 来注册您的 COM 控件
  4. 确保您的 exe 仅支持 win32
  5. 顺便说一下,如果两台电脑的windows版本不同,请尝试使用“兼容模式”来启动你的exe。

【讨论】:

    猜你喜欢
    • 2011-08-08
    • 2011-04-09
    • 2012-05-22
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 2012-07-05
    • 2012-07-25
    • 2013-03-23
    相关资源
    最近更新 更多