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