2009-03-26 14 views
1
import mymodule, ctypes 
#import pygame 

foo = ctypes.cdll.MyDll.foo 

print 'success' 

wenn ich die import pygame dies mit WindowsError: [Errno 182] The operating system cannot load %1 nicht Kommentar-. Der Stack-Frame befindet sich in Ctypes-Python-Code und versucht, MyDll zu laden. win32 Fehlercode 182 ist ERROR_INVALID_ORDINAL. Wenn der Pygame-Import nicht vorhanden ist, wird das Skript erfolgreich ausgeführt.pygame wird vermasseln ctypes

Update: Wenn ich es außerhalb des Debuggers ausführen, wird das% 1 mit 'libpng13.dll' gefüllt, das ist im Arbeitsverzeichnis und referenziert von MyDll, und pygame lädt sicher eine Version von libpng. Ich habe keine Ahnung, wie ich das lösen würde.

Antwort

2

Das klingt wie ein DLL-Konflikt. Es scheint, dass import pygame lädt einige DLL, die nicht kompatibel ist mit einer DLL, die MyDll braucht. Sie sollten versuchen, dies mit sysinternals ProcessExplorer zu debuggen, es kann zeigen, welche DLLs ein Prozess geladen hat; Suchen Sie in beiden Fällen nach verschiedenen DLLs.

Ein weiteres nützliches Tool DLL-Probleme zu debuggen, ist das Dependency Walker, von www.dependencywalker.com

+0

Klingt vielversprechend, aber ich bin mir nicht sicher, was ich im ProcessExplorer suche. –

+0

In ProcessExplorer wählen Sie den Prozess aus, den Sie untersuchen möchten. Dann drücken Sie 'Strg + L' (Ansicht-> Unteren Bereich anzeigen). Konfigurieren Sie den unteren Bereich so, dass er DLLs mit 'Strg + D' (Ansicht-> Untere Fensteransicht-> DLLs) anzeigt und untersuchen Sie die DLLs, die der Prozess geladen hat. – theller

+0

Entschuldigung ich war unklar: Ich verstehe, wie man das Werkzeug benutzt, aber ich verstehe nicht, wonach ich es suche. –

2

Update für das Protokoll: Ich glaube, es durch verschiedene Module (pygame und mydll) mehrere Versionen von libpng, die geladen waren. Ich benutzte Multiprocessing, um die zwei Module zu trennen, und alles ist gut.