diff --git a/comtypes/_post_coinit/unknwn.py b/comtypes/_post_coinit/unknwn.py index 84cc48c7..9f87bcf8 100644 --- a/comtypes/_post_coinit/unknwn.py +++ b/comtypes/_post_coinit/unknwn.py @@ -76,6 +76,9 @@ def __new__(cls, name, bases, namespace): if dispmethods is not None: new_cls._disp_methods_ = dispmethods + return new_cls + + def __init__(self, name, bases, namespace): # If we sublass a COM interface, for example: # # class IDispatch(IUnknown): @@ -85,26 +88,24 @@ def __new__(cls, name, bases, namespace): # subclass of POINTER(IUnknown) because of the way ctypes # typechecks work. if bases == (object,): - _ptr_bases = (new_cls, _compointer_base) + _ptr_bases = (self, _compointer_base) else: - _ptr_bases = (new_cls, POINTER(bases[0])) + _ptr_bases = (self, POINTER(bases[0])) # The interface 'new_cls' is used as a mixin. p = type(_compointer_base)( - "POINTER(%s)" % new_cls.__name__, + "POINTER(%s)" % self.__name__, _ptr_bases, - {"__com_interface__": new_cls, "_needs_com_addref_": None}, + {"__com_interface__": self, "_needs_com_addref_": None}, ) from ctypes import _pointer_type_cache # type: ignore - _pointer_type_cache[new_cls] = p - - if new_cls._case_insensitive_: - new_cls._patch_case_insensitive_to_ptr_type(p) - new_cls._patch_reference_fix_to_ptrptr_type(p) + _pointer_type_cache[self] = p - return new_cls + if self._case_insensitive_: + self._patch_case_insensitive_to_ptr_type(p) + self._patch_reference_fix_to_ptrptr_type(p) @staticmethod def _patch_case_insensitive_to_ptr_type(p: Type) -> None: