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。我不知道如何解决这个问题。
答案 0 :(得分:2)
这听起来像是dll冲突。 import pygame
似乎加载了一些与MyDll
所需的dll不兼容的dll。
您应该尝试使用sysinternals ProcessExplorer对其进行调试,它可以显示进程已加载的dll;在这两种情况下寻找不同的dll。
调试dll问题的另一个有用的工具是来自www.dependencywalker.com
的dependencywalker答案 1 :(得分:2)
更新记录:我相信不同模块(pygame和mydll)加载了多个版本的libpng。我使用多处理来分离两个模块,一切都很花哨。