""" Type library hiányában DispatchWithEvents nem működik . Ezért itt egy elemibb megoldást mutatunk be, ami kicsit jobban emlékeztet a sima C++-os kliens implementációjára. """ import win32com.client import win32com.client.connect import pythoncom IID_IIntVolt = pythoncom.MakeIID("{9DF3E4B3-48DD-11D4-8CF7-005004E9490B}") class mysink: """ sink class Python módra """ # itt ki van használva, hogy a _public_methods_ elemeinek dispid-je 1000-től kezdődik # azaz a szerver oldalon az 1000-es dipid-re hivatkozás a sink-ünk IntVolt metódusát jelenti #(ne feledjük a sink-nek IDispatch interfésze van és az Invoke metódus a dispid-vel #határozza meg, hogy kit akar) # HA NEM AKRUNK TRÜKKÖZNI: # - itt kell egy DISPID-metódus mapping(IDispatch interfész megfelelő metódusát implementálni kell) # - Invoke -ot is implementálni kell _public_methods_ = ["IntVolt"] def _query_interface_(self, iid): """ Csak 'QueryInterface' implementálása szükséges. Csak ez tartalmaz a sink-ünkre jellemző egyedi információkat. """ #ha az egyetlen forrásunk érdekli a hívót, akkor kap egy becsomagolt változatot #egyébként nem adunk vissza semmit(==NULL C++-ban) import win32com.server.util if iid==IID_IIntVolt: return win32com.server.util.wrap(self) def IntVolt(self,arg): """ Ezért csináltuk a sinket. """ print "mysink.IntVolt: echo int-et kapott paraméterként(%i)" % arg echo=win32com.client.Dispatch("mechoevt.cechoevt") # echo használható, de nincs eseménykezelés # a következő sorral hozzuk létre a kapcsolatot a sink és a megfelelő connection point között connection = win32com.client.connect.SimpleConnection(echo, mysink(),IID_IIntVolt) #jöhet a teszt echo.count=0 print "echo 0-szor", echo.echo("kutya") echo.count=3 print "echo 3-szor", echo.echo("kutya") print echo.echo(1965) del echo pythoncom.CoUninitialize()