"""
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()