"""

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