【问题标题】:Windows Error 1114 while loading dll in Python在 Python 中加载 dll 时出现 Windows 错误 1114
【发布时间】:2018-02-28 15:14:03
【问题描述】:

我目前正在尝试将一些代码从 32 位 windows XP 计算机移植到 64 位 windows 10 计算机。我需要在我的 python 代码中导入家庭开发的 C dll,如下所示:

    from ctypes import *
    [...]
    self.inter_test_dll = windll.LoadLibrary("my.dll")

    self.w = QtWidgets.QWidget()
    self.wid = self.w.winId()
    self.wid.setsize(64)
    print(self.wid)
    self.inter_test_dll.dll_load_window(int(self.wid), 'test')
    self.inter_test_dll.dll_connect(2, self.callback)
    [...]

一旦加载了神秘的dll,程序就会崩溃

    Windows Error 1114

这意味着 dll 在初始化时崩溃。我已经在我的个人机器(64 位 Windows 7)上尝试了我的 dll,没问题,一切正常。 我已经在 C 程序中的相同 64 位 Windows 10 机器上尝试了该 dll,LoadLibrary("my.dll") 也失败了,但 LoadLibraryEx("my.dll",NULL, DONT_RESOLVE_DLL_REFERENCE ) 确实有效。

当我在我的 dll 上运行依赖遍历器时,它似乎遗漏了一些 2 到 4 深度级别的 dll,但奇怪的是,当从 C 程序中正确调用时,它似乎并没有影响它的工作。

所以我的问题是,有没有办法在 Python 中实例化我的 dll 而无需深入检查其依赖关系?如果没有,有没有办法修改我的 Windows 行为,以便默认跳过该检查?

非常感谢!

【问题讨论】:

  • 将dll加载到python后你想做什么?因为它似乎无论如何都无法使用,除非你解决依赖关系。
  • 使用 gflags 为 python.exe 启用加载程序快照,并运行带有调试器的 ctypes.WinDLL("my.dll")。这将告诉您哪个 DLL 的 init 例程失败。
  • @Train :我用它做什么并不重要(或者至少在我看来如此),因为当加载到 C 程序中时,它工作得很好......丢失的 dll 不水平1 依赖项,在我看来,尽管影响 1 级 dll 的行为并没有影响它们在我的特定情况下的行为,但它们缺失的事实。
  • @eryksun :事情是我知道哪些失败了(我使用依赖项步行器检查依赖项)。而且他们很多!另外,它们都在 c:/system32/downlevel 中,我真的不打算完全搞砸我的窗户,因为我不确定自己是否有足够的能力......
  • Dependency walker 已过时,将显示大量用于 API 集的“缺失”DLL。不要使用它。您没有丢失的 DLL。您已经了解加载图表中的所有 DLL,并在导入表中更新了所有必需的符号名称。现在加载程序正在调用DLL_PROCESS_ATTACH 的DLL 入口点,其中一个失败了。不幸的是,加载器不再在消息框中显示哪个失败,并且系统日志中没有事件告诉您哪个失败,因此您必须使用带有加载器快照的调试器。

标签: python windows dll dllimport


【解决方案1】:

感谢cmets,我的问题已经解决了。

WxWidgets 已于 2 天前更新。我已经用这个新版本重新编译了我的 dll,并且错误消失了。

抱歉,我找不到更通用的方法来解决这个问题。

【讨论】:

    猜你喜欢
    • 2019-11-10
    • 1970-01-01
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-13
    • 1970-01-01
    相关资源
    最近更新 更多