diff --git a/comtypes/_post_coinit/misc.py b/comtypes/_post_coinit/misc.py index e2c92108..7910389b 100644 --- a/comtypes/_post_coinit/misc.py +++ b/comtypes/_post_coinit/misc.py @@ -14,6 +14,7 @@ ) from ctypes.wintypes import DWORD, LPCWSTR, LPVOID from typing import TYPE_CHECKING, Any, Optional, TypeVar, overload +from typing import Union as _UnionT from comtypes import CLSCTX_LOCAL_SERVER, CLSCTX_REMOTE_SERVER, CLSCTX_SERVER, GUID from comtypes._memberspec import COMMETHOD @@ -21,7 +22,7 @@ from comtypes.GUID import REFCLSID if TYPE_CHECKING: - from ctypes import _Pointer + from ctypes import _CArgObject, _Pointer from comtypes import hints as hints # noqa # type: ignore @@ -146,20 +147,20 @@ def CoCreateInstance( def CoGetClassObject( clsid: GUID, clsctx: Optional[int] = None, - pServerInfo: "Optional[COSERVERINFO]" = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, interface: None = None, ) -> "hints.IClassFactory": ... @overload def CoGetClassObject( clsid: GUID, clsctx: Optional[int] = None, - pServerInfo: "Optional[COSERVERINFO]" = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, interface: type[_T_IUnknown] = IUnknown, ) -> _T_IUnknown: ... def CoGetClassObject( clsid: GUID, clsctx: Optional[int] = None, - pServerInfo: "Optional[COSERVERINFO]" = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, interface: Optional[type[IUnknown]] = None, ) -> IUnknown: if clsctx is None: @@ -337,7 +338,7 @@ def CoCreateInstanceEx( interface: None = None, clsctx: Optional[int] = None, machine: Optional[str] = None, - pServerInfo: Optional[COSERVERINFO] = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, ) -> IUnknown: ... @overload def CoCreateInstanceEx( @@ -345,14 +346,14 @@ def CoCreateInstanceEx( interface: type[_T_IUnknown], clsctx: Optional[int] = None, machine: Optional[str] = None, - pServerInfo: Optional[COSERVERINFO] = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, ) -> _T_IUnknown: ... def CoCreateInstanceEx( clsid: GUID, interface: Optional[type[IUnknown]] = None, clsctx: Optional[int] = None, machine: Optional[str] = None, - pServerInfo: Optional[COSERVERINFO] = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, ) -> IUnknown: """The basic windows api to create a COM class object and return a pointer to an interface, possibly on another machine. diff --git a/comtypes/client/_activeobj.py b/comtypes/client/_activeobj.py index d70f7bc9..7130f0e5 100644 --- a/comtypes/client/_activeobj.py +++ b/comtypes/client/_activeobj.py @@ -1,4 +1,4 @@ -from typing import Any, Optional, TypeVar, overload +from typing import Any, Literal, Optional, TypeVar, overload from typing import Union as _UnionT import comtypes @@ -14,10 +14,24 @@ # Object creation # @overload -def GetActiveObject(progid: _UnionT[str, type[CoClass], GUID]) -> Any: ... +def GetActiveObject( + progid: _UnionT[str, type[CoClass], GUID], + interface: None = None, + dynamic: Literal[False] = False, +) -> Any: ... +@overload +def GetActiveObject( + progid: _UnionT[str, type[CoClass], GUID], + interface: None = None, + dynamic: Literal[True] = True, +) -> _UnionT[ + "comtypes.client.lazybind.Dispatch", "comtypes.client.dynamic._Dispatch" +]: ... @overload def GetActiveObject( - progid: _UnionT[str, type[CoClass], GUID], interface: type[_T_IUnknown] + progid: _UnionT[str, type[CoClass], GUID], + interface: type[_T_IUnknown] = IUnknown, + dynamic: Literal[False] = False, ) -> _T_IUnknown: ... def GetActiveObject( progid: _UnionT[str, type[CoClass], GUID], diff --git a/comtypes/client/_create.py b/comtypes/client/_create.py index 8ac9fc18..39ff2406 100644 --- a/comtypes/client/_create.py +++ b/comtypes/client/_create.py @@ -1,5 +1,5 @@ import logging -from typing import TYPE_CHECKING, Any, Optional, TypeVar, overload +from typing import TYPE_CHECKING, Any, Literal, Optional, TypeVar, overload from typing import Union as _UnionT import comtypes @@ -8,6 +8,8 @@ from comtypes.client._managing import _manage if TYPE_CHECKING: + from ctypes import _CArgObject + from comtypes import hints # type: ignore @@ -23,20 +25,20 @@ def GetClassObject( progid: _UnionT[str, type[CoClass], GUID], clsctx: Optional[int] = None, - pServerInfo: Optional[COSERVERINFO] = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, interface: None = None, ) -> "hints.IClassFactory": ... @overload def GetClassObject( progid: _UnionT[str, type[CoClass], GUID], clsctx: Optional[int] = None, - pServerInfo: Optional[COSERVERINFO] = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, interface: type[_T_IUnknown] = IUnknown, ) -> _T_IUnknown: ... def GetClassObject( progid: _UnionT[str, type[CoClass], GUID], clsctx: Optional[int] = None, - pServerInfo: Optional[COSERVERINFO] = None, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, interface: Optional[type[IUnknown]] = None, ) -> IUnknown: """Create and return the class factory for a COM object. @@ -56,9 +58,29 @@ def CreateObject( progid: _UnionT[str, type[CoClass], GUID], clsctx: Optional[int] = None, machine: Optional[str] = None, - interface: Optional[type[_T_IUnknown]] = None, - dynamic: bool = ..., - pServerInfo: Optional[COSERVERINFO] = None, + interface: None = None, + dynamic: Literal[False] = False, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, +) -> Any: ... +@overload +def CreateObject( + progid: _UnionT[str, type[CoClass], GUID], + clsctx: Optional[int] = None, + machine: Optional[str] = None, + interface: None = None, + dynamic: Literal[True] = True, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, +) -> _UnionT[ + "comtypes.client.lazybind.Dispatch", "comtypes.client.dynamic._Dispatch" +]: ... +@overload +def CreateObject( + progid: _UnionT[str, type[CoClass], GUID], + clsctx: Optional[int] = None, + machine: Optional[str] = None, + interface: type[_T_IUnknown] = IUnknown, + dynamic: Literal[False] = False, + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, ) -> _T_IUnknown: ... def CreateObject( progid: _UnionT[str, type[CoClass], GUID], # which object to create @@ -66,7 +88,7 @@ def CreateObject( machine: Optional[str] = None, # where to create the object interface: Optional[type[IUnknown]] = None, # the interface we want dynamic: bool = False, # use dynamic dispatch - pServerInfo: Optional[COSERVERINFO] = None, # server info struct for remoting + pServerInfo: "_UnionT[None, _CArgObject, COSERVERINFO]" = None, # server info struct for remoting ) -> Any: """Create a COM object from 'progid', and try to QueryInterface() it to the most useful interface, generating typelib support on @@ -122,12 +144,26 @@ def CreateObject( return _manage(obj, clsid, interface=interface) -@overload -def CoGetObject(displayname: str, interface: type[_T_IUnknown]) -> _T_IUnknown: ... @overload def CoGetObject( - displayname: str, interface: None = None, dynamic: bool = False + displayname: str, + interface: None = None, + dynamic: Literal[False] = False, ) -> Any: ... +@overload +def CoGetObject( + displayname: str, + interface: None = None, + dynamic: Literal[True] = True, +) -> _UnionT[ + "comtypes.client.lazybind.Dispatch", "comtypes.client.dynamic._Dispatch" +]: ... +@overload +def CoGetObject( + displayname: str, + interface: type[_T_IUnknown], + dynamic: Literal[False] = False, +) -> _T_IUnknown: ... def CoGetObject( displayname: str, interface: Optional[type[IUnknown]] = None,