Thanks Mark. It did not make a difference. Also, when i wrap a class using win32.server.util.wrap what does it do,internally ? Is there somewhere I can read about this ? Here is the *.py generated file. Please let me know if the implementation is correct based on this file. ---------------------------------------------------------------------------------------------------------------------------------------------------- # -*- coding: mbcs -*- # Created by makepy.py version 0.4.98 # By python version 2.5.4 (r254:67916, Dec 23 2008, 15:10:54) [MSC v.1310 32 bit (Intel)] # From type library 'MbtQuote.dll' # On Fri Apr 10 11:15:24 2009 """MbtQuote 2.0 Type Library""" makepy_version = '0.4.98' python_version = 0x20504f0 import win32com.client.CLSIDToClass, pythoncom import win32com.client.util from pywintypes import IID from win32com.client import Dispatch # The following 3 lines may need tweaking for the particular server # Candidates are pythoncom.Missing, .Empty and .ArgNotFound defaultNamedOptArg=pythoncom.Empty defaultNamedNotOptArg=pythoncom.Empty defaultUnnamedArg=pythoncom.Empty CLSID = IID('{13F76618-D199-4485-8C95-DC524958686C}') MajorVersion = 2 MinorVersion = 0 LibraryFlags = 8 LCID = 0x0 class constants: csConnected =0x2 # from enum enumConnectionState csConnecting =0x1 # from enum enumConnectionState csDisconnected =0x0 # from enum enumConnectionState csILG =-1 # from enum enumConnectionState csIndeterminate =0x5 # from enum enumConnectionState csLoggedIn =0x4 # from enum enumConnectionState csLoggingIn =0x3 # from enum enumConnectionState csMAX =0x6 # from enum enumConnectionState msAsk =0x2 # from enum enumMarketSide msBid =0x1 # from enum enumMarketSide pcBoth =0x2 # from enum enumPutCall pcCall =0x0 # from enum enumPutCall pcPut =0x1 # from enum enumPutCall qsfLevelOne =0x1 # from enum enumQuoteServiceFlags qsfLevelTwo =0x2 # from enum enumQuoteServiceFlags qsfOptions =0x8 # from enum enumQuoteServiceFlags qsfTimeAndSales =0x4 # from enum enumQuoteServiceFlags tickDown =0x1 # from enum enumTick tickEvenUp =0x0 # from enum enumTick tcQuote_Closing =0x69 # from enum enumTickCondition tcQuote_DueToRelated =0x70 # from enum enumTickCondition tcQuote_FastMarket =0x6b # from enum enumTickCondition tcQuote_Halted =0x80 # from enum enumTickCondition tcQuote_NewsDistribution =0x6a # from enum enumTickCondition tcQuote_NewsPending =0x6f # from enum enumTickCondition tcQuote_NoOpenResume =0x73 # from enum enumTickCondition tcQuote_NonFirm =0x6e # from enum enumTickCondition tcQuote_OfferDepth =0x65 # from enum enumTickCondition tcQuote_Opening =0x68 # from enum enumTickCondition tcQuote_OrderImbalance =0x72 # from enum enumTickCondition tcQuote_OutOfSequence =0x89 # from enum enumTickCondition tcQuote_QuoteRequest =0x95 # from enum enumTickCondition tcQuote_QuoteResume =0x96 # from enum enumTickCondition tcQuote_RegularQuote =0x64 # from enum enumTickCondition tcQuote_Restricted =0x8a # from enum enumTickCondition tcQuote_Suspended =0x88 # from enum enumTickCondition tcQuote_TradeResume =0x97 # from enum enumTickCondition tcTrade_Acquistion =0x1 # from enum enumTickCondition tcTrade_AutoExecute =0x1f # from enum enumTickCondition tcTrade_AveragePrice =0x35 # from enum enumTickCondition tcTrade_BasketIndexClose =0x37 # from enum enumTickCondition tcTrade_Bunched =0x16 # from enum enumTickCondition tcTrade_BunchedSold =0x17 # from enum enumTickCondition tcTrade_CapElectionTrade =0x2e # from enum enumTickCondition tcTrade_Cash_Sale =0x5 # from enum enumTickCondition tcTrade_ClosePrice =0x2f # from enum enumTickCondition tcTrade_DerivativelyPriced =0x2d # from enum enumTickCondition tcTrade_DirectPlus =0x2a # from enum enumTickCondition tcTrade_Distribution =0x2 # from enum enumTickCondition tcTrade_FormT =0x1d # from enum enumTickCondition tcTrade_IntermarketSweep =0x2c # from enum enumTickCondition tcTrade_IntradayDetail =0x20 # from enum enumTickCondition tcTrade_LateOpen =0x1e # from enum enumTickCondition tcTrade_MidPrice =0x1b # from enum enumTickCondition tcTrade_NextDaySale =0x6 # from enum enumTickCondition tcTrade_OpenSale =0xa # from enum enumTickCondition tcTrade_OpeningDetail =0x21 # from enum enumTickCondition tcTrade_OutOfSequence =0xb # from enum enumTickCondition tcTrade_PriorReferencePrice =0x29 # from enum enumTickCondition tcTrade_RegularSale =0x0 # from enum enumTickCondition tcTrade_Reopen =0x11 # from enum enumTickCondition tcTrade_Rule127 =0x22 # from enum enumTickCondition tcTrade_Rule155 =0x8 # from enum enumTickCondition tcTrade_SellerSale =0x7 # from enum enumTickCondition tcTrade_Settlement =0x1c # from enum enumTickCondition tcTrade_SoldLastSale =0x9 # from enum enumTickCondition tcTrade_Split =0x3 # from enum enumTickCondition tcTrade_Stopped =0x15 # from enum enumTickCondition tcTrade_YellowFlag =0x2b # from enum enumTickCondition tsDeleted =0x3 # from enum enumTickStatus tsFiltered =0x1 # from enum enumTickStatus tsNormal =0x0 # from enum enumTickStatus tsOutOfSeq =0x2 # from enum enumTickStatus ttAskTick =0x2 # from enum enumTickType ttBidTick =0x1 # from enum enumTickType ttTradeTick =0x0 # from enum enumTickType from win32com.client import DispatchBaseClass class IMbtQuotes(DispatchBaseClass): """IMbtQuotes Interface""" CLSID = IID('{7DEAC3B3-CA70-4E48-8552-E5CCA5493B71}') coclass_clsid = IID('{A58A9CE8-7681-46FB-8064-35D6DF9CEA0C}') def AdviseSymbol(self, pNotify=defaultNamedNotOptArg, bstrSymbol=defaultNamedNotOptArg, lServiceFlags=defaultNamedNotOptArg): """Adds given symbol to interest list and registers callback interface to receive its quotes.""" return self._oleobj_.InvokeTypes(2, LCID, 1, (24, 0), ((13, 1), (8, 0), (3, 0)),pNotify , bstrSymbol, lServiceFlags) def Connect(self): """Forces a reconnection to quote servers.""" return self._oleobj_.InvokeTypes(1, LCID, 1, (3, 0), (),) def Disconnect(self): """Disconnects from quote servers.""" return self._oleobj_.InvokeTypes(5, LCID, 1, (24, 0), (),) def GetCachedAggregateLevel2Size(self, bstrSymbol=defaultNamedNotOptArg, dPrice=defaultNamedNotOptArg, side=defaultNamedNotOptArg): """Returns the cached aggregate Level II size at the given price/side.""" return self._oleobj_.InvokeTypes(13, LCID, 1, (3, 0), ((8, 1), (5, 0), (3, 0)),bstrSymbol , dPrice, side) def GetCachedOptionsRecord(self, bstrSymbol=defaultNamedNotOptArg): """Returns a cached options record for the given options symbol if one exists.""" return self._ApplyTypes_(12, 1, (36, 0), ((8, 1),), u'GetCachedOptionsRecord', None,bstrSymbol ) def GetCachedQuote(self, bstrSymbol=defaultNamedNotOptArg): """Returns a cached level 1/fundamental quote for the given symbol if one exists.""" return self._ApplyTypes_(6, 1, (36, 0), ((8, 1),), u'GetCachedQuote', None,bstrSymbol ) def GetSingleQuote(self, bstrSymbol=defaultNamedNotOptArg, lTimeout=defaultNamedNotOptArg): """Blocks and returns a level one quote for the given symbol subject to timeout.""" return self._ApplyTypes_(14, 1, (36, 0), ((8, 1), (3, 0)), u'GetSingleQuote', None,bstrSymbol , lTimeout) def UnadviseAll(self, pNotify=defaultNamedNotOptArg): """Removes interest for ALL symbols that were registered to the given callback interface.""" return self._oleobj_.InvokeTypes(4, LCID, 1, (24, 0), ((13, 1),),pNotify ) def UnadviseSymbol(self, pNotify=defaultNamedNotOptArg, bstrSymbol=defaultNamedNotOptArg, lServiceFlags=defaultNamedNotOptArg): """Removes given symbol from interest list (for the given callback interface only).""" return self._oleobj_.InvokeTypes(3, LCID, 1, (24, 0), ((13, 1), (8, 0), (3, 0)),pNotify , bstrSymbol, lServiceFlags) _prop_map_get_ = { "ConnectionState": (11, 2, (3, 0), (), "ConnectionState", None), "RemoteAddress": (17, 2, (8, 0), (), "RemoteAddress", None), "ServerName": (16, 2, (8, 0), (), "ServerName", None), } _prop_map_put_ = { } class _IMbtQuotesEvents: """_IMbtQuotesEvents Interface""" CLSID = CLSID_Sink = IID('{C13BD25A-B87F-4EFF-924C-F7109261A394}') coclass_clsid = IID('{A58A9CE8-7681-46FB-8064-35D6DF9CEA0C}') _public_methods_ = [] # For COM Server support _dispid_to_func_ = { 2 : "OnClose", 3 : "OnLogonSucceed", 1 : "OnConnect", } def __init__(self, oobj = None): if oobj is None: self._olecp = None else: import win32com.server.util from win32com.server.policy import EventHandlerPolicy cpc=oobj._oleobj_.QueryInterface(pythoncom.IID_IConnectionPointContainer) cp=cpc.FindConnectionPoint(self.CLSID_Sink) cookie=cp.Advise(win32com.server.util.wrap(self, usePolicy=EventHandlerPolicy)) self._olecp,self._olecp_cookie = cp,cookie def __del__(self): try: self.close() except pythoncom.com_error: pass def close(self): if self._olecp is not None: cp,cookie,self._olecp,self._olecp_cookie = self._olecp,self._olecp_cookie,None,None cp.Unadvise(cookie) def _query_interface_(self, iid): import win32com.server.util if iid==self.CLSID_Sink: return win32com.server.util.wrap(self) # Event Handlers # If you create handlers, they should have the following prototypes: # def OnClose(self, lErrorCode=defaultNamedNotOptArg): # """Event raised when a quote server connection has been dropped.""" # def OnLogonSucceed(self): # """Event raised when successful login to a quote server has occurred.""" # def OnConnect(self, lErrorCode=defaultNamedNotOptArg): # """Event raised when a new connection has been made to a quote server."""
from win32com.client import CoClassBaseClass # This CoClass is known by the name 'MBTrading.MbtQuotes.1' class MbtQuotes(CoClassBaseClass): # A CoClass # Provides realtime quote services. CLSID = IID('{A58A9CE8-7681-46FB-8064-35D6DF9CEA0C}') coclass_sources = [ _IMbtQuotesEvents, ] default_source = _IMbtQuotesEvents coclass_interfaces = [ IMbtQuotes, ] default_interface = IMbtQuotes IMbtQuotes_vtables_dispatch_ = 1 IMbtQuotes_vtables_ = [ (( u'Connect' , u'plRetVal' , ), 1, (1, (), [ (16387, 10, None, None) , ], 1 , 1 , 4 , 0 , 28 , (3, 0, None, None) , 0 , )), (( u'AdviseSymbol' , u'pNotify' , u'bstrSymbol' , u'lServiceFlags' , ), 2, (2, (), [ (13, 1, None, "IID('{C8323838-B094-4E3C-B9BE-D08B5C06E6BE}')") , (8, 0, None, None) , (3, 0, None, None) , ], 1 , 1 , 4 , 0 , 32 , (3, 0, None, None) , 0 , )), (( u'UnadviseSymbol' , u'pNotify' , u'bstrSymbol' , u'lServiceFlags' , ), 3, (3, (), [ (13, 1, None, "IID('{C8323838-B094-4E3C-B9BE-D08B5C06E6BE}')") , (8, 0, None, None) , (3, 0, None, None) , ], 1 , 1 , 4 , 0 , 36 , (3, 0, None, None) , 0 , )), (( u'UnadviseAll' , u'pNotify' , ), 4, (4, (), [ (13, 1, None, "IID('{C8323838-B094-4E3C-B9BE-D08B5C06E6BE}')") , ], 1 , 1 , 4 , 0 , 40 , (3, 0, None, None) , 0 , )), (( u'Disconnect' , ), 5, (5, (), [ ], 1 , 1 , 4 , 0 , 44 , (3, 0, None, None) , 0 , )), (( u'GetCachedQuote' , u'bstrSymbol' , u'pRec' , ), 6, (6, (), [ (8, 1, None, None) , (36, 10, None, None) , ], 1 , 1 , 4 , 0 , 48 , (3, 0, None, None) , 0 , )), (( u'ConnectionState' , u'pVal' , ), 11, (11, (), [ (16387, 10, None, None) , ], 1 , 2 , 4 , 0 , 52 , (3, 0, None, None) , 0 , )), (( u'GetCachedOptionsRecord' , u'bstrSymbol' , u'pRec' , ), 12, (12, (), [ (8, 1, None, None) , (36, 10, None, None) , ], 1 , 1 , 4 , 0 , 56 , (3, 0, None, None) , 0 , )), (( u'GetCachedAggregateLevel2Size' , u'bstrSymbol' , u'dPrice' , u'side' , u'pVal' , ), 13, (13, (), [ (8, 1, None, None) , (5, 0, None, None) , (3, 0, None, None) , (16387, 10, None, None) , ], 1 , 1 , 4 , 0 , 60 , (3, 0, None, None) , 0 , )), (( u'GetSingleQuote' , u'bstrSymbol' , u'lTimeout' , u'pRec' , ), 14, (14, (), [ (8, 1, None, None) , (3, 0, None, None) , (36, 10, None, None) , ], 1 , 1 , 4 , 0 , 64 , (3, 0, None, None) , 0 , )), (( u'ServerName' , u'pVal' , ), 16, (16, (), [ (16392, 10, None, None) , ], 1 , 2 , 4 , 0 , 68 , (3, 0, None, None) , 0 , )), (( u'RemoteAddress' , u'pVal' , ), 17, (17, (), [ (16392, 10, None, None) , ], 1 , 2 , 4 , 0 , 72 , (3, 0, None, None) , 0 , )), ] IMbtQuotesNotify_vtables_dispatch_ = 0 IMbtQuotesNotify_vtables_ = [ (( u'OnQuoteData' , u'pRec' , ), 1610678272, (1610678272, (), [ (36, 1, None, None) , ], 1 , 1 , 4 , 0 , 12 , (3, 0, None, None) , 0 , )), (( u'OnLevel2Data' , u'pRec' , ), 1610678273, (1610678273, (), [ (36, 1, None, None) , ], 1 , 1 , 4 , 0 , 16 , (3, 0, None, None) , 0 , )), (( u'OnTSData' , u'pRec' , ), 1610678274, (1610678274, (), [ (36, 1, None, None) , ], 1 , 1 , 4 , 0 , 20 , (3, 0, None, None) , 0 , )), (( u'OnOptionsData' , u'pRec' , ), 1610678275, (1610678275, (), [ (36, 1, None, None) , ], 1 , 1 , 4 , 0 , 24 , (3, 0, None, None) , 0 , )), ] RecordMap = { u'LEVEL2RECORD': '{6CE8D5AD-1352-4ECC-B9E3-145E796FE4D1}', u'TSRECORD': '{9B55F875-A3A7-476E-8D18-55961A7AF0ED}', u'OPTIONSRECORD': '{345495FA-527D-4A50-A8C4-4A1C4A9C2D46}', u'QUOTERECORD': '{9BE86BB5-99D4-4F03-AC5A-C115128573C0}', } CLSIDToClassMap = { '{A58A9CE8-7681-46FB-8064-35D6DF9CEA0C}' : MbtQuotes, '{7DEAC3B3-CA70-4E48-8552-E5CCA5493B71}' : IMbtQuotes, '{C13BD25A-B87F-4EFF-924C-F7109261A394}' : _IMbtQuotesEvents, } CLSIDToPackageMap = {} win32com.client.CLSIDToClass.RegisterCLSIDsFromDict( CLSIDToClassMap ) VTablesToPackageMap = {} VTablesToClassMap = { '{C8323838-B094-4E3C-B9BE-D08B5C06E6BE}' : 'IMbtQuotesNotify', '{7DEAC3B3-CA70-4E48-8552-E5CCA5493B71}' : 'IMbtQuotes', } NamesToIIDMap = { 'IMbtQuotesNotify' : '{C8323838-B094-4E3C-B9BE-D08B5C06E6BE}', 'IMbtQuotes' : '{7DEAC3B3-CA70-4E48-8552-E5CCA5493B71}', '_IMbtQuotesEvents' : '{C13BD25A-B87F-4EFF-924C-F7109261A394}', } win32com.client.constants.__dicts__.append(constants.__dict__) ---------------------------------------------------------------------------------------------------------------------------------------------------- On Mon, Apr 13, 2009 at 3:09 AM, Mark Hammond <skippy.hamm...@gmail.com>wrote: > On 11/04/2009 4:26 AM, Kapil fadnis wrote: > >> I think this has been talked about on a previous thread but its an old >> thread here but I am hoping to get some feedback that will help me >> understand the issue, >> >> http://mail.python.org/pipermail/python-win32/2006-September/005044.html >> >> >> I have an interface >> MBTQUOTELib.IMbtQuotesNotify >> which has four methods to be implemented, each of which is an event on >> the server side i.e. my broker. >> One of the methods is "OnQuoteData(QUOTERECORD). The way I have seen it >> being implemented (in the thread above) is >> run makepy - i on the interface definition, i use PythonWin for this >> which gives me a .py file. >> 13F76618-D199-4485-8C95-DC524958686Cx0x2x0.py >> >> The implementation is >> >> ------------------------------------------------------------------------------------------- >> from win32com import universal >> >> universal.RegisterInterfaces('{13F76618-D199-4485-8C95-DC524958686C}',0,2,0,["IMbtQuotesNotify"]) >> class Q: >> _com_interfaces_ = ['IMbtQuotesNotify'] >> _typelib_guid_ = '{13F76618-D199-4485-8C95-DC524958686C}' >> _typelib_version_ = 2, 0 >> >> def OnQuoteData(self,pQuote): >> print "got onquote!" >> print type(pQuote) >> print "%s" % pQuote >> >> import win32com.server.util >> qnotify = win32com.server.util.wrap(Q(),useDispatcher=1) >> >> import win32com.client as com >> mbtCom = com.Dispatch("MBTrading.MbtComMgr") >> mbtCom.DoLogin(9,"myusername","mypassword","") >> quote = mbtCom.Quotes >> quote.AdviseSymbol(qnotify,'AAPL',1) >> > > See if adding a call to pythoncom.PumpMessages() at the very end makes a > difference... > > Cheers, > > Mark >
_______________________________________________ python-win32 mailing list python-win32@python.org http://mail.python.org/mailman/listinfo/python-win32