2012-10-29 14 views
12

をアンロードします。私はどのようにこれを行うには、ドキュメントで何かを見つけるのに問題があります。私はこのかなり古いポストを参照してください:How can I unload a DLL using ctypes in Python?。私は、私が見つけたことがなく、ハックの少ないものがあることを望んでいます。ctypesのは、私はこのようなctypesのでDLLをロードしていますDLL

+1

'del lib'を試しましたか? – Junuxx

+0

私は、私が参照したポストから: "私は知らないが、これはdllをアンロードすることを疑う。私はそれが現在の名前空間(言語参照ごとに) 「これは本当だと思う。解放される必要があるリソースはまだ開いていると私は確信しています。 –

答えて

19

私が今までに見つけた唯一の効果的な方法は、LoadLibraryFreeLibraryです。このように:

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) 
+0

このエラーでこのルートを終了すると、私のctypes呼び出しが失敗し始めます。 "ValueError:多すぎる引数でプロシージャが呼び出された可能性があります(16バイト超過)" –

+0

関数の呼び出し規約つかいます? 'WinDLL'は' stdcall'を意味します。あなたのlibは 'cdecl'ですか?その場合は代わりに 'ctypes.CDLL'を使用してください。 –

+0

その説明をありがとう。 –