pygame搞砸了ctypes

时间:2009-03-26 17:31:25

标签: python winapi pygame ctypes

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

2 个答案:

答案 0 :(得分:2)

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

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

的dependencywalker

答案 1 :(得分:2)

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