import mymodule, ctypes
#import pygame
foo = ctypes.cdll.MyDll.foo
print 'success'
Если я раскомментирую import pygame
, это не с WindowsError: [Errno 182] The operating system cannot load %1
. кадр стека находится в коде python ctypes, пытаясь загрузить MyDll. Код ошибки win32 182 равен ERROR_INVALID_ORDINAL
. если импорт pygame не существует, script выполняется успешно.
Обновление: если я запустил его вне отладчика,% 1 заполняется "libpng13.dll", который находится в рабочем каталоге и ссылается на MyDll, а pygame, безусловно, загружает некоторую версию libpng. Я понятия не имею, как я разрешу это.
Это звучит как конфликт dll. Похоже, что import pygame
загружает некоторую dll, которая несовместима с dll, которая нуждается в MyDll
.
Вы должны попытаться отладить это с помощью sysinternals ProcessExplorer, он может показать, какие DLL-процессы загружены; ищите разные dll в обоих случаях.
Другим полезным инструментом для отладки DLL-проблем является зависимый пользователь, от www.dependencywalker.com
Обновление для записи: я считаю, что несколько версий libpng загружаются разными модулями (pygame и mydll). Я использовал многопроцессорную обработку для разделения двух модулей и всего денди.