Вопрос по python, ctypes – ctypes выгрузить dll

15

Я загружаю DLL с ctypes, как это:

lib = cdll.LoadLibrary("someDll.dll");

Когда я закончу с библиотекой, мне нужно выгрузить ее, чтобы освободить ресурсы, которые она использует. У меня проблемы с поиском чего-либо в документах относительно того, как это сделать. Я вижу этот довольно старый пост:Как я могу выгрузить DLL, используя ctypes в Python?, Я надеюсь, что есть что-то очевидное, что я не нашел, и меньше взломать.

Ты пытался ?del lib Junuxx
У меня есть, но из поста, на который я ссылался: «я неНе знаю, но я сомневаюсь, что это выгружает DLL. я'я предполагаю, что это только удаляет привязку к имени в текущем пространстве имен (согласно языковой ссылке) "  Я подозреваю, что это правда. Я уверен, что ресурс, который мне нужен, все еще открыт. Doo Dah

Ваш Ответ

1   ответ
21

ебя ответственность заLoadLibrary а такжеFreeLibrary, Как это:

import ctypes

# get the module handle and create a ctypes library object
libHandle = ctypes.windll.kernel32.LoadLibraryA('mydll.dll')
lib = ctypes.WinDLL(None, handle=libHandle)

# do stuff with lib in the usual way
lib.Foo(42, 666)

# clean up by removing reference to the ctypes library object
del lib

# unload the DLL
ctypes.windll.kernel32.FreeLibrary(libHandle)
Какое соглашение о вызовах ваша функция должна использовать?WinDLL средстваstdcall, Ваша библиотекаcdecl? Если это так, используйтеctypes.CDLL вместо. David Heffernan
Спасибо за это объяснение. Doo Dah
Мои вызовы ctypes начинают сбой, когда я иду по этому маршруту с этой ошибкой: "ValueError: Процедура, вероятно, вызвана со слишком большим количеством аргументов (более 16 байт) " когда я пытаюсь сделать вызов функции Doo Dah

Похожие вопросы