Blender アドオン作るときの小ネタ。
例えば、 Python では性能上厳しかったり、何らかの理由で Python から触れない何かを触りたい場合、 C++ で Blender のアドオンを書きたいケースがあります。
そういったことをやりたいときの方法をメモしておきます。
といっても、通常のアドオンと同様、 Python で記述して、そこから DLL の関数を呼び出す、といった感じになります。
import ctypes dll: ctypes.CDLL def register(): global dll dll = ctypes.cdll.LoadLibrary("/path/to/library.dll") def unregister(): global dll if dll is not None: import _ctypes _ctypes.FreeLibrary(dll._handle)
DLL のロード、アンロードはこんな感じで出来ます。
ctypes
は、 Python 向けの外部関数ライブラリで、標準ライブラリーとして Blender にも読み込まれており、
そこから外部 DLL をロード・アンロードすることができます。
FreeLibrary
については特にドキュメントに記載はされていませんが、関数としては存在しており、これに DLL のハンドルを渡すことで、明示的にアンロードすることができます。
Blender アドオンの場合は、有効・無効ボタンがあるため、無効ボタンを押下されたタイミングで unregister
が走るので、そのときに適切に FreeLibrary
を呼び出す必要があります。
ちなみに Kernel32 を直叩きしても良いとは思うけど、 x64 にて定義がミスってるという報告が見受けられるので、そこだけご注意を。