win32com, string array --> Type mismatch?

H

Harry Pehkonen

I'm running WRQ's Reflection telnet client
(win32com.client.Dispatch("Reflection2.Session")). It appears I can
only do late binding. There is one method that takes a ``string
array,'' and fails with:

Traceback (most recent call last):
File "<interactive input>", line 1, in ?
File "Reflection.py", line 549, in goto_switch
result = self.connection.WaitForStrings(waitfor_strngs)
File "Reflection.py", line 399, in WaitForStrings
options)
File "<COMObject Reflection2.Session>", line 2, in WaitForStrings
com_error: (-2147352571, 'Type mismatch.', None, 1)

I've tried providing lists and tuples of strings, lists and tuples of
unicode strings.

makepy -i reports:

Warning - could not load registered typelib

Without the -i, it creates CLSID
0DE5A6C0-4B0D-101B-AC7B-04021C007002.py, but when I run the telnet
client, COM Browser says it's F29799A0-4B0C-101B-AC7B-04021C007002
(off a bit). The 0DE...py module mentions this CLSID F29...

I tried renaming and importing the 0DE...py file, but I still get the
Type mismatch.

In short, is there something specific I need to do in order to pass a
``string array'' from Python to a COM server when I'm (I think) stuck
with late binding?

Thanks!
Harry.

PS. Please reply to this group as I get a ton of spam.
 
R

Roger Upole

I've run into the same problem with Reflection. This is what I do to get
around it:
import win32com.client
###win32com.client.gencache.EnsureDispatch('Reflection2.Application',0)
###only need to do above once
ra=win32com.client.Dispatch('Reflection2.Application')
m=win32com.client.gencache.GetModuleForProgID('Reflection2.Application')
r=m.Application(ra)
r.Visible=1
r.WaitForStrings(('xxxxx','yyyyyy'),0,1)
I'm probably using an older version of Reflection than you are (there is
no
Session object) but the same principles should apply.
hth
Roger
 
H

Harry Pehkonen

Roger Upole said:
I've run into the same problem with Reflection. This is what I do to get
around it:
import win32com.client
###win32com.client.gencache.EnsureDispatch('Reflection2.Application',0)
###only need to do above once

That's very interesting -- for me, it produces yet another CLSID:

KeyError: '{1396DDA0-4B0D-101B-AC7B-04021C007002}'

I got the above when trying to EnsureDispatch for Reflection2.Session.
Trying to do the same for Reflection2.Application produces an
``invalid class string.'' I also get that with
Dispatch("Reflection2.Application") :C
ra=win32com.client.Dispatch('Reflection2.Application')
m=win32com.client.gencache.GetModuleForProgID('Reflection2.Application')

I seem to get None from GetModuleForProgID. I also tried
GetModuleForCLSID with all of three CLSID's -- all produce:
said:
r=m.Application(ra)
r.Visible=1
r.WaitForStrings(('xxxxx','yyyyyy'),0,1)
I'm probably using an older version of Reflection than you are (there is
no
Session object) but the same principles should apply.

Mine is version 8.0.5. The documentation just says you get more
visual basic support, and possible faster scripts with the Session
object than Application. I'd say stick with the older one ;D

Thanks, Roger, for your reply. That method is still dead in the water
for me, but I'm thrilled to learn more about win32all!

I have that method wrapped nicely, so I'll just make some work-arounds
for now, and fix it later if possible.

Thanks again!
Harry.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,754
Messages
2,569,528
Members
45,000
Latest member
MurrayKeync

Latest Threads

Top