【问题标题】:pygame is screwing up ctypespygame 搞砸了 ctypes
【发布时间】:2010-10-15 18:24:38
【问题描述】:
import mymodule, ctypes
#import pygame

foo = ctypes.cdll.MyDll.foo

print 'success'

如果我取消注释 import pygame,这将失败并显示 WindowsError: [Errno 182] The operating system cannot load %1。堆栈框架在 ctypes python 代码中,试图加载 MyDll。 win32 错误代码 182 是ERROR_INVALID_ORDINAL。如果 pygame 导入不存在,则脚本运行成功。

更新:如果我在调试器之外运行它,%1 会充满“libpng13.dll”,它位于工作目录中并由 MyDll 引用,并且 pygame 肯定会加载某些版本的 libpng。我不知道如何解决这个问题。

【问题讨论】:

    标签: python winapi pygame ctypes


    【解决方案1】:

    这听起来像是 dll 冲突。似乎import pygame 加载了一些与MyDll 需要的dll 不兼容的dll。 您应该尝试使用 sysinternals ProcessExplorer 进行调试,它可以显示进程加载了哪些 dll;在这两种情况下寻找不同的 dll。

    另一个调试 dll 问题的有用工具是dependencywalker,来自www.dependencywalker.com

    【讨论】:

    • 听起来很有希望,但我不确定我在 ProcessExplorer 中寻找什么。
    • 在 ProcessExplorer 中,选择要检查的进程。然后你点击“Ctrl+L”(查看->显示下窗格)。配置下部窗格,使其使用“Ctrl+D”显示 DLL(查看->下部窗格视图->DLL)并检查进程已加载的 dll。
    • 对不起,我不清楚:我了解如何使用该工具,但我不明白我在使用它来查找什么。
    • 好的,我没有看到您编辑了您的问题。 pygame 加载的 libpng 版本是否与您的 MyDll 加载或需要的版本不同?如果你先加载MyDll,然后再导入pygame,会有什么不同吗?
    【解决方案2】:

    更新记录:我相信不同的模块(pygame 和 mydll)加载了多个版本的 libpng。我使用多处理来分离两个模块,一切都很花哨。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多