comtypes
パッケージの使用時に気付いたことのメモです。comtypes
のバージョンにより挙動は変わる可能性があります。
IUnknown
派生クラスは解放時にRelease
COMメソッドが呼び出される。- 参照カウンタを気にして自分で解放するとランダムでスレッド外アクセスエラーが発生しました。C/C++を使っているとハマる点だと思います。
IUnknown
自体は__del__
関数を定義しませんが、メタクラスに_cominterface_meta
クラスを持ちます。メタクラスによる__new__
関数でIUnknown
クラスや派生クラスの派生クラスは_compointer_base
に置換されます。_compointer_base
クラスは__del__
関数を持ち、その中でRelease
関数を呼び出します。- ローカルの
comtypes
パッケージのunknown.py
にある_compointer_base.__del__
関数にprint("released")
等を追加すると確認できます。