1
import mymodule, ctypes
#import pygame

foo = ctypes.cdll.MyDll.foo

print 'success'

コメントを外すと、import pygameこれはで失敗しWindowsError: [Errno 182] The operating system cannot load %1ます。スタックフレームはctypespythonコードであり、MyDllをロードしようとしています。win32エラーコード182はERROR_INVALID_ORDINALです。pygameのインポートがない場合、スクリプトは正常に実行されます。

更新:デバッガーの外部で実行すると、%1は作業ディレクトリにありMyDllによって参照される'libpng13.dll'で埋められ、pygameは確かにlibpngのバージョンをロードしています。これをどのように解決するかわかりません。

4

2 に答える 2

2

これは、dll の競合のように聞こえます。import pygame必要なdllと互換性のないdllをロードしているようですMyDll。これを sysinternals ProcessExplorer でデバッグしてみてください。プロセスがロードした dll を表示できます。どちらの場合も、異なる dll を探してください。

dll の問題をデバッグするためのもう 1 つの便利なツールは、www.dependencywalker.comの依存関係ウォーカーです。

于 2009-03-26T17:56:51.993 に答える
2

記録のための更新: 複数のバージョンの libpng が異なるモジュール (pygame および mydll) によってロードされていたと思います。マルチプロセッシングを使用して 2 つのモジュールを分離したところ、すべてうまくいきました。

于 2009-07-29T14:17:07.283 に答える