Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 8 additions & 7 deletions comtypes/_post_coinit/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,15 @@
)
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
from comtypes._post_coinit.unknwn import IUnknown
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

Expand Down Expand Up @@ -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:
Expand Down Expand Up @@ -337,22 +338,22 @@ 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(
clsid: GUID,
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.
Expand Down
20 changes: 17 additions & 3 deletions comtypes/client/_activeobj.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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],
Expand Down
58 changes: 47 additions & 11 deletions comtypes/client/_create.py
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -8,6 +8,8 @@
from comtypes.client._managing import _manage

if TYPE_CHECKING:
from ctypes import _CArgObject

from comtypes import hints # type: ignore


Expand All @@ -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.
Expand All @@ -56,17 +58,37 @@ 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
clsctx: Optional[int] = None, # how to create the object
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
Expand Down Expand Up @@ -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,
Expand Down
Loading