[python-win32] Python-win32 Digest, Vol 33, Issue 7

Mark Hammond mhammond at skippinet.com.au
Thu Dec 8 06:47:49 CET 2005


CreateGuid() will create a new GUID each time it is registered.  That will
end up creating "turds" in your registry.  Generate the GUID once and
hard-code it in, as the samples do.

Your main problem is that you forgot the "self" param in the method.

Cheers,

Mark
-----Original Message-----
From: Tony C [mailto:cappy2112 at gmail.com]
Sent: Thursday, 8 December 2005 3:25 PM
To: Mark Hammond
Cc: python-win32 at python.org
Subject: Re: Python-win32 Digest, Vol 33, Issue 7


Ok, I'm about 90% there now

I've used the Simple.py from page 213, because there is less involved.
when I run it- I see the registration messages. All is good so far.
I made one tiny change, related to the call to CreateGuid()

import pythoncom

class PythonCOMServer:

   _public_methods_ = ['pyCOMSplit']
   _reg_progid_= "PythonCOMDemo"
   _reg_clsid_= pythoncom.CreateGuid()

   def pyCOMSplit(StringFromVB):
       from string import split
       if self.StringFromVB != None:
           return split(self.StringFromVB )


if __name__ == '__main__':
   print"Registering COM server"
   import win32com.server.register
   win32com.server.register.UseCommandLine( PythonCOMServer )


When I try sending a string from the VB side,
Type Error; str() takes at most 1 arguments, two given

I see no explicit calls to str.


Here's the VB side


Option Explicit

Private Sub cmdToPython_Click()


    Dim Python As Object
    Dim FromPython  As Variant

    Set Python = CreateObject("PythonCOMDemo")

    FromPython = Python.pyCOMSplit("This string to Python")

    txtFromPython = FromPython

End Sub


This call, is what is causing the runtime exception
Python.pyCOMSplit ("This string to Python")


What am I doing wrong?

thanks








On 12/6/05, Mark Hammond < mhammond at skippinet.com.au> wrote:
> >>Certainly COM would work.  In this case your VB EXE would use
CreateObject
> >>to create a Python implemented object.

> As what type of Python Object?

> I have the VB6 ide open, and the references Browser as well,
> there is no generic Python object to include into a VB project.

> Which means one would have to create a Python COM server
> and Type library first, before being able to reference it
> from the VB IDE.

Actually, you don't need to create a typelib.  Just register the PythonCOM
server, and have VB use CreateObject with the ProgID.  All vars will need to
be declared as "object", and you wont get auto-complete type features, but
it will work.  VB supports late-binding.


> Even though I have Python Programming in Win32, I'm not sure what
> needs to be done to make a minimal Python COM server that can be
> called from VB.

Pages 221 and 222 have an example using VBA (ie, the VB embedded in MSOffice
apps)

> Also, creating a type library requires using Visual C- which isn't a
> problem, it's the language of the IDL required to create the TLB that
> I don't udnerstand.

You should be able to avoid TLBs - certainly to get started...

Mark



More information about the Python-win32 mailing list