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에서 참조되는 'libpng13.dll'으로 채워지며 Pygame은 일부 버전의 libpng를로드하고 있습니다. 나는 이것을 어떻게 해결할 것인지 전혀 모른다.
해결책
이것은 DLL 충돌처럼 들립니다. 그것은 것 같습니다 import pygame
DLL과 호환되지 않는 일부 DLL을로드합니다. MyDll
필요합니다. sysinternals processexplorer로 이것을 디버깅해야합니다. 프로세스가로드 된 DLL을 보여줄 수 있습니다. 두 경우 모두 다른 DLL을 찾으십시오.
DLL 문제를 디버그하는 또 다른 유용한 도구는 의존성 워커입니다. www.dependencywalker.com
다른 팁
레코드에 대한 업데이트 : 여러 버전의 libpng가 다른 모듈 (pygame 및 mydll)에 의해로드되고 있다고 생각합니다. 멀티 프로세싱을 사용하여 두 모듈과 모든 것이 댄디를 분리했습니다.