469,358 Members | 1,588 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 469,358 developers. It's quick & easy.

IronPython and COM Interface

Hello,

I'm new to IronPython and COM so please bear with me.

I have a COM interface provided to me. I need to implement this
interface and pass it to a method as a way of implementing
'callbacks'.

However it appears that the methods of my interface object are never
called.

As a alternative, I implemented the interface in C# and then extended
the C# class in IronPython. However, on running the code, methods of
my C# class rather than the IronPython class are being called.

Can anyone advise? Is this possible in IronPython?

The code is listed below.

Regards,
Divya

---------------------------

import time

import clr
clr.AddReference('Interop.MBTCOMLib.dll')
clr.AddReference('Interop.MBTORDERSLib.dll')
clr.AddReference('Interop.MBTQUOTELib.dll')

import MBTCOMLib
import MBTORDERSLib
import MBTQUOTELib

demo_user='user'
demo_pass='pass'
demo_host=9

class MBEvents(MBTQUOTELib.IMbtQuotesNotify):
def __init__(self):
MBTQUOTELib.IMbtQuotesNotify.__init__(self)

def OnLevel2Data(data):
print 'OnLevel2Data'

def OnOptionsData(self, data):
print 'OnOptionsData'

def OnQuoteData(self, data):
print 'OnQuoteData'

def OnTSData(self, data):
print 'OnTSData'

class MB:
def __init__(self):
self.conn = MBTCOMLib.MbtComMgrClass()
#self.conn.EnableSplash(False)
self.orders = self.conn.OrderClient
self.quotes = self.conn.Quotes
self.events = MBEvents()

def login(self, host=demo_host, user=demo_user, passwd=demo_pass):
self.conn.DoLogin(host, user, passwd, '')
print self.quotes.RemoteAddress, self.quotes.RemotePort
self.quotes.AdviseSymbol(self.events, 'EUR/USD', 1|2|3|4)

Mar 14 '07 #1
1 4609
Divya wrote:
Hello,

I'm new to IronPython and COM so please bear with me.

I have a COM interface provided to me. I need to implement this
interface and pass it to a method as a way of implementing
'callbacks'.

However it appears that the methods of my interface object are never
called.

As a alternative, I implemented the interface in C# and then extended
the C# class in IronPython. However, on running the code, methods of
my C# class rather than the IronPython class are being called.

Can anyone advise? Is this possible in IronPython?

The code is listed below.

Regards,
Divya

---------------------------

import time

import clr
clr.AddReference('Interop.MBTCOMLib.dll')
clr.AddReference('Interop.MBTORDERSLib.dll')
clr.AddReference('Interop.MBTQUOTELib.dll')

import MBTCOMLib
import MBTORDERSLib
import MBTQUOTELib

demo_user='user'
demo_pass='pass'
demo_host=9

class MBEvents(MBTQUOTELib.IMbtQuotesNotify):
def __init__(self):
MBTQUOTELib.IMbtQuotesNotify.__init__(self)

def OnLevel2Data(data):
print 'OnLevel2Data'

def OnOptionsData(self, data):
print 'OnOptionsData'

def OnQuoteData(self, data):
print 'OnQuoteData'

def OnTSData(self, data):
print 'OnTSData'

class MB:
def __init__(self):
self.conn = MBTCOMLib.MbtComMgrClass()
#self.conn.EnableSplash(False)
self.orders = self.conn.OrderClient
self.quotes = self.conn.Quotes
self.events = MBEvents()

def login(self, host=demo_host, user=demo_user, passwd=demo_pass):
self.conn.DoLogin(host, user, passwd, '')
print self.quotes.RemoteAddress, self.quotes.RemotePort
self.quotes.AdviseSymbol(self.events, 'EUR/USD', 1|2|3|4)
It may not help but I was struggling with the COM-callback issue
yesterday and found that this works in regular python:

import win32com.server.util

def callback:
_public_methods_=['progress']
def progress(self, total, number):
print "completed %i of %i" % (number, total)

#
# Get instance of callback class
#
cb=callback()
#
# Wrap the callback class to turn it into an IDispatch (COM) object
# so I can pass it to my COM object.
#
idCallback=win32com.server.util.wrap(cb)
#
# Call the COM interface and pass it the callback function
#
r=oC.WSset_callback(idCallback)

In my case the COM object was also written in Python so to get
to the python object I do following:

def WSset_callback(idCallback)
self.callback=win32com.client.Dispatch(idCallback)

Now I can call .progress method of callback class from the COM
object.

self.callback.progress(total, number)

Hope this helps in some way.

-Larry
Mar 14 '07 #2

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

82 posts views Thread by Neuruss | last post: by
27 posts views Thread by James | last post: by
3 posts views Thread by Carl Johan Rehn | last post: by
3 posts views Thread by Sanghyeon Seo | last post: by
reply views Thread by Sanghyeon Seo | last post: by
7 posts views Thread by sanxiyn | last post: by
9 posts views Thread by Claudio Grondi | last post: by
2 posts views Thread by edfialk | last post: by
2 posts views Thread by Troels Thomsen | last post: by
1 post views Thread by CARIGAR | last post: by
reply views Thread by zhoujie | last post: by
reply views Thread by suresh191 | last post: by
1 post views Thread by Marylou17 | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.