Hi, I have a problem implementing a simple COM server AddIn which should satisfy a special COM interface provided by an application I'm using.
The server application: CADdy.exe => type library CADdy.tlb The AddIn interface of CADdy.tlb: ICADdyAddIn From gencache.EnsureModule('{9C3BB401-114D-11D4-AC72-00105A4925FC}', 0, 1, 2, bForDemand=True) # CADdy.tlb I got class ICADdyAddIn(DispatchBaseClass): """ICADdyAddIn Interface""" CLSID = IID('{14F65AE1-4671-11D4-8B1A-00105A49278B}') coclass_clsid = None def Exit(self): """method Exit""" return self._oleobj_.InvokeTypes(2, LCID, 1, (24, 0), (),) def Init(self, theCADdy=defaultNamedNotOptArg): """method Init""" return self._oleobj_.InvokeTypes(1, LCID, 1, (24, 0), ((9, 1),),theCADdy ) _prop_map_get_ = { "CLSID": (3, 2, (8, 0), (), "CLSID", None), "Description": (5, 2, (8, 0), (), "Description", None), "ProgId": (4, 2, (8, 0), (), "ProgId", None), } _prop_map_put_ = { } My AddIn COM server Addin.py: ## ## Addin1.py - A very simple CADdy AddIn COM server ## from win32com import universal from win32com.client import gencache import pythoncom import sys gencache.EnsureModule('{9C3BB401-114D-11D4-AC72-00105A4925FC}', 0, 1, 2, bForDemand=True) # CADdy.tlb universal.RegisterInterfaces('{9C3BB401-114D-11D4-AC72-00105A4925FC}', 0, 1, 2, ['ICADdyAddIn']) class AddIn1: _com_interfaces_ = ['ICADdyAddIn'] _public_methods_ = [] _reg_clsctx_ = pythoncom.CLSCTX_INPROC_SERVER _reg_clsid_ = "{AB6C657A-2C26-4BD0-ABB8-D777BC91F199}" # From pythoncom.CreateGuid() _reg_progid_ = "CADdyAddIn.PythonTest1" _reg_policy_spec_ = "win32com.server.policy.EventHandlerPolicy" def __init__(self): self.appHostApp = None def Init(self, theCADdy): """method Init""" self.appHostApp = theCADdy def Exit(self): """method Exit""" self.appHostApp = None def getCLSID(self): return _reg_clsid_ def getProgId(self): return _reg_progid_ def getDescription(self): return "CADdy++ CADdyAddIn.PythonTest1" if __name__ == '__main__': import win32com.server.register win32com.server.register.UseCommandLine(AddIn1) This won't work! I can't start this COM server from my application. First some questions: Do I have to write _public_methods_ = ['Init', 'Exit'] in order to satisfy the required interface ICADdyAddIn? How do I handle the properties from ICADdyAddIn _prop_map_get_ = { "CLSID": (3, 2, (8, 0), (), "CLSID", None), "Description": (5, 2, (8, 0), (), "Description", None), "ProgId": (4, 2, (8, 0), (), "ProgId", None), } correctly? Do have to use _public_attrs_ and if so how do I use it correctly? I used the methods getCLSID, getProgId and getDescription just to give it a try but they seem to be totaly wrong. I used the excelAddIn.py demo as a start. However, is this the recommended way for writing a COM server addin? I have to mention that I'm quite new to Python as well as to PythonCOM. So my questions may be quite naive, but I would very much appreciate some help for this topic. With best regards Johannes _______________________________________________ Python-win32 mailing list Python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32