Я написал тривиальную программу на C, которая просто связывается с DLL и имеет двухстрочную функцию main, которая вызывает функцию DLL и печатает результат. Запуск этой программы выводит ожидаемый результат 0, указывающий, что компьютер лицензирован. Пока все хорошо.
Теперь я попробовал два отдельных подхода к использованию DLL из Python: один использует динамические ctypes и выглядит следующим образом:
Код: Выделить всё
import ctypes
lib = ctypes.CDLL("path/to/dll")
print(lib.check_license())
Аналогично, я пытался написать скомпилированное C-расширение Python, которое связывается с DLL во время компиляции, используя код, аналогичный коду программы C (но, очевидно, с использованием механизмов Python вокруг него). Это дает тот же результат, что и версия ctypes, возвращающая ошибочный код. Обратите внимание, что в DLL есть и другие функции, которые я вызывал, используя оба подхода и которые возвращают ожидаемые результаты, соответствующие ссылочному коду C, поэтому дело не в базовой логике вызова функций DLL, а в чем-то более тонком.
Я использовал новую функцию ctypes.util.dllist() для проверки списка загруженных DLL в Python и подтвердил, что это расширенный список DLL, заданный как зависимости C. исполняемый файл, который я написал.
Может ли кто-нибудь предложить какой-либо механизм, с помощью которого вызов функции из интерпретатора Python может изменить поведение внутреннего кода DLL и заставить его давать разные результаты?
Подробнее здесь: https://stackoverflow.com/questions/798 ... ython-vs-c
Мобильная версия