Using Python with COM to communicate with proprietary Windows software

Joakim Persson zaladin at home.se
Fri Sep 9 12:15:44 EDT 2005


On Fri, 09 Sep 2005 08:36:00 +0200, Thomas Heller <theller at python.net>
wrote:

>Joakim Persson <zaladin at home.se> writes:
>
>> I have a rather bloated C++ client prototype which "works", so I
>> should have all the code needed to invoke the interface, but this
>> client is of course rather bloated in itself and not suitable for my
>> experimental programming approach. Am I right in believing that the
>> COM interface I am trying to use is of what is called a "custom" type,
>> that I cannot access using Python + win32com?
>
>Sounds like a perfect job for comtypes, which is a COM library
>implemented in pure Python, based on ctypes.  comtypes should make it
>easy to access custom (non-dispatch derived) com interfaces, or the
>vtable based part of dual interfaces - it would be good however, if you
>have a type library for the interfaces.
>
>http://sourceforge.net/projects/comtypes/
>
>No docs yet, but there are tests included which should get you started.
>
>(I have released and announced this 3 weeks ago, but haven't got a
>single feedback.  So it seems the need to access custom interfaces is
>very low.)
>
>Thommas

Looks good, I think I downloaded ctypes but didn't put in the effort
to wrap the custom COM interface.

I have the type library and full documentation of the interface, so
IMO it _should_ be possible to make a 100% Python application for
testing this particular interface, which would definitely speed up
prototyping, which is the entire goal of my work. I will give it a
spin tomorrow, and I'll get back on the NG once I have tested it. Many
thanks! 

It seems most Python uses for COM rely on "simple" automation of COM
interfaces of the IDispatch type, but I need something more (full
client<->server communication and threading, for instance). Hopefully
your module will at least let me get one step further... 

My remaining two options, seeing as I would really like to at least
put the data processing and presentation part in Python, are linking
Python with C++ for the COM part and building (Data + Presentation) in
Python, or making a complete standalone C++ part for the COM part and
then _another_ client<->server solution using e.g. named
pipes/sockets. 

-- 
Joakim Persson
M.Sc student, CS/E @ LTH



More information about the Python-list mailing list