Неверная ошибка дескриптора от python3 ctypes - сработало вчера - PullRequest
0 голосов
/ 23 апреля 2020

У меня есть скрипт, и в нем мне нужно вызвать функцию из DLL для другого программного обеспечения. Сценарий запускался вчера и за последние несколько месяцев, но остановился сегодня. Я действительно деинсталлировал и переустановил python вчера, так как у меня были другие не связанные проблемы.

gmAPI = cdll.LoadLibrary(
    "C:/Program Files (x86)/GoldMine/gm7s32.dll")
recid = create_string_buffer(16)
gmAPI.GMW_NewRecID(recid, username)

Это часть кода, которая глючит, я получаю код ошибки 6, неверный дескриптор при попытке выполнить третью строку. Это 32-битная DLL, и я использую его на том же 32-битном интерпретаторе, хотя и переустановил.

Мой объект cdll выглядит следующим образом:

<CDLL 'C:\Program Files (x86)\GoldMine\gm7s32.dll', handle 10000000 at 0x3f44280>

однако, _handle для объекта: 268435456.

Я не специалист по ctypes, но я предполагаю 100000000 - недопустимый дескриптор, но я ожидаю, что он согласуется с дескриптором объекта. Я не знаю, почему это изменилось бы. Я уже запускал его на нескольких машинах с несколькими переводчиками.

1 Ответ

0 голосов
/ 23 апреля 2020

Сейчас работает. Я думаю, что переключение на windll вместо cdll добилось цели. До сих пор не знаю, почему он работал, а затем остановился, поэтому, если кто-то захочет предложить теорию, go для нее.

gmAPI = windll.LoadLibrary(
    'C:/Program Files (x86)/GoldMine/gm7s32.dll')
recid = create_string_buffer(16)
gmAPI.GMW_NewRecID(recid, username)
...