1
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。我不知道我将如何解决这个问题。

4

2 回答 2

2

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

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

于 2009-03-26T17:56:51.993 回答
2

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

于 2009-07-29T14:17:07.283 回答