You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
3.8 KiB
139 lines
3.8 KiB
6 years ago
|
# More type descriptions from parsed COM typelibaries, extending those
|
||
|
# in typedesc_base
|
||
|
|
||
|
import ctypes
|
||
|
from comtypes.tools.typedesc_base import *
|
||
|
|
||
|
class TypeLib(object):
|
||
|
def __init__(self, name, guid, major, minor, doc=None):
|
||
|
self.name = name
|
||
|
self.guid = guid
|
||
|
self.major = major
|
||
|
self.minor = minor
|
||
|
self.doc = doc
|
||
|
|
||
|
def __repr__(self):
|
||
|
return "<TypeLib(%s: %s, %s, %s)>" % (self.name, self.guid, self.major, self.minor)
|
||
|
|
||
|
class Constant(object):
|
||
|
def __init__(self, name, typ, value):
|
||
|
self.name = name
|
||
|
self.typ = typ
|
||
|
self.value = value
|
||
|
|
||
|
class External(object):
|
||
|
def __init__(self, tlib, name, size, align, docs=None):
|
||
|
# the type library containing the symbol
|
||
|
self.tlib = tlib
|
||
|
# name of symbol
|
||
|
self.symbol_name = name
|
||
|
self.size = size
|
||
|
self.align = align
|
||
|
# type lib description
|
||
|
self.docs = docs
|
||
|
|
||
|
def get_head(self):
|
||
|
# codegen might call this
|
||
|
return self
|
||
|
|
||
|
class SAFEARRAYType(object):
|
||
|
def __init__(self, typ):
|
||
|
self.typ = typ
|
||
|
self.align = self.size = ctypes.sizeof(ctypes.c_void_p) * 8
|
||
|
|
||
|
class ComMethod(object):
|
||
|
# custom COM method, parsed from typelib
|
||
|
def __init__(self, invkind, memid, name, returns, idlflags, doc):
|
||
|
self.invkind = invkind
|
||
|
self.name = name
|
||
|
self.returns = returns
|
||
|
self.idlflags = idlflags
|
||
|
self.memid = memid
|
||
|
self.doc = doc
|
||
|
self.arguments = []
|
||
|
|
||
|
def add_argument(self, typ, name, idlflags, default):
|
||
|
self.arguments.append((typ, name, idlflags, default))
|
||
|
|
||
|
class DispMethod(object):
|
||
|
# dispatchable COM method, parsed from typelib
|
||
|
def __init__(self, dispid, invkind, name, returns, idlflags, doc):
|
||
|
self.dispid = dispid
|
||
|
self.invkind = invkind
|
||
|
self.name = name
|
||
|
self.returns = returns
|
||
|
self.idlflags = idlflags
|
||
|
self.doc = doc
|
||
|
self.arguments = []
|
||
|
|
||
|
def add_argument(self, typ, name, idlflags, default):
|
||
|
self.arguments.append((typ, name, idlflags, default))
|
||
|
|
||
|
class DispProperty(object):
|
||
|
# dispatchable COM property, parsed from typelib
|
||
|
def __init__(self, dispid, name, typ, idlflags, doc):
|
||
|
self.dispid = dispid
|
||
|
self.name = name
|
||
|
self.typ = typ
|
||
|
self.idlflags = idlflags
|
||
|
self.doc = doc
|
||
|
|
||
|
class DispInterfaceHead(object):
|
||
|
def __init__(self, itf):
|
||
|
self.itf = itf
|
||
|
|
||
|
class DispInterfaceBody(object):
|
||
|
def __init__(self, itf):
|
||
|
self.itf = itf
|
||
|
|
||
|
class DispInterface(object):
|
||
|
def __init__(self, name, members, base, iid, idlflags):
|
||
|
self.name = name
|
||
|
self.members = members
|
||
|
self.base = base
|
||
|
self.iid = iid
|
||
|
self.idlflags = idlflags
|
||
|
self.itf_head = DispInterfaceHead(self)
|
||
|
self.itf_body = DispInterfaceBody(self)
|
||
|
|
||
|
def get_body(self):
|
||
|
return self.itf_body
|
||
|
|
||
|
def get_head(self):
|
||
|
return self.itf_head
|
||
|
|
||
|
class ComInterfaceHead(object):
|
||
|
def __init__(self, itf):
|
||
|
self.itf = itf
|
||
|
|
||
|
class ComInterfaceBody(object):
|
||
|
def __init__(self, itf):
|
||
|
self.itf = itf
|
||
|
|
||
|
class ComInterface(object):
|
||
|
def __init__(self, name, members, base, iid, idlflags):
|
||
|
self.name = name
|
||
|
self.members = members
|
||
|
self.base = base
|
||
|
self.iid = iid
|
||
|
self.idlflags = idlflags
|
||
|
self.itf_head = ComInterfaceHead(self)
|
||
|
self.itf_body = ComInterfaceBody(self)
|
||
|
|
||
|
def get_body(self):
|
||
|
return self.itf_body
|
||
|
|
||
|
def get_head(self):
|
||
|
return self.itf_head
|
||
|
|
||
|
class CoClass(object):
|
||
|
def __init__(self, name, clsid, idlflags, tlibattr):
|
||
|
self.name = name
|
||
|
self.clsid = clsid
|
||
|
self.idlflags = idlflags
|
||
|
self.tlibattr = tlibattr
|
||
|
self.interfaces = []
|
||
|
|
||
|
def add_interface(self, itf, idlflags):
|
||
|
self.interfaces.append((itf, idlflags))
|