Pygame портит ctypes

1
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. Я понятия не имею, как я разрешу это.

Теги:
pygame
winapi
ctypes

2 ответа

2
Лучший ответ

Это звучит как конфликт dll. Похоже, что import pygame загружает некоторую dll, которая несовместима с dll, которая нуждается в MyDll. Вы должны попытаться отладить это с помощью sysinternals ProcessExplorer, он может показать, какие DLL-процессы загружены; ищите разные dll в обоих случаях.

Другим полезным инструментом для отладки DLL-проблем является зависимый пользователь, от www.dependencywalker.com

  • 0
    Звучит многообещающе, но я не уверен, что я ищу в ProcessExplorer.
  • 0
    В ProcessExplorer вы выбираете процесс, который хотите проверить. Затем вы нажимаете «Ctrl + L» (Вид-> Показать нижнюю панель). Настройте нижнюю панель так, чтобы она отображала библиотеки DLL с помощью Ctrl + D («Просмотр»> «Просмотр нижней панели»> «DLL»), и изучите библиотеки, загруженные процессом.
Показать ещё 2 комментария
2

Обновление для записи: я считаю, что несколько версий libpng загружаются разными модулями (pygame и mydll). Я использовал многопроцессорную обработку для разделения двух модулей и всего денди.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню