をアンロードします。私はどのようにこれを行うには、ドキュメントで何かを見つけるのに問題があります。私はこのかなり古いポストを参照してください:How can I unload a DLL using ctypes in Python?。私は、私が見つけたことがなく、ハックの少ないものがあることを望んでいます。ctypesのは、私はこのようなctypesのでDLLをロードしていますDLL
答えて
私が今までに見つけた唯一の効果的な方法は、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)
このエラーでこのルートを終了すると、私のctypes呼び出しが失敗し始めます。 "ValueError:多すぎる引数でプロシージャが呼び出された可能性があります(16バイト超過)" –
関数の呼び出し規約つかいます? 'WinDLL'は' stdcall'を意味します。あなたのlibは 'cdecl'ですか?その場合は代わりに 'ctypes.CDLL'を使用してください。 –
その説明をありがとう。 –
'del lib'を試しましたか? – Junuxx
私は、私が参照したポストから: "私は知らないが、これはdllをアンロードすることを疑う。私はそれが現在の名前空間(言語参照ごとに) 「これは本当だと思う。解放される必要があるリソースはまだ開いていると私は確信しています。 –