DLL дает разные результаты при вызове через Python и CPython

Программы на Python
Ответить
Anonymous
 DLL дает разные результаты при вызове через Python и C

Сообщение Anonymous »

У меня есть DLL (сторонняя, с закрытым исходным кодом), которую я хочу использовать через скрипт Python. Эта DLL содержит функцию, которая проверяет, имеет ли компьютер «лицензию» для выполнения определенных задач (очевидно, путем проверки аппаратного ключа, но я не знаю никаких подробностей об этом).
Я написал тривиальную программу на C, которая просто связывается с DLL и имеет двухстрочную функцию main, которая вызывает функцию DLL и печатает результат. Запуск этой программы выводит ожидаемый результат 0, указывающий, что компьютер лицензирован. Пока все хорошо.
Теперь я попробовал два отдельных подхода к использованию DLL из Python: один использует динамические ctypes и выглядит следующим образом:

Код: Выделить всё

import ctypes
lib = ctypes.CDLL("path/to/dll")
print(lib.check_license())
Функция не принимает аргументов и возвращает целое число, поэтому она вызывается правильно, но возвращаемое значение равно 10, значение, указывающее, что лицензия не найдена.
Аналогично, я пытался написать скомпилированное 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»