PythonCOM in ASP: very dodgy behaviour
Mark Hammond
mhammond at skippinet.com.au
Thu Dec 19 19:07:43 EST 2002
My guess is that ASP is writing the *value* of your COM object, not the
object itself - ie, in VB, this would be like dropping the "Set".
You should print what
> wrapWibble = Session("Wibble") # retrieve from session object
Is before attempting the unwrap. My guess it is your int.
I won't have time to look more at this until I get back from holidays in
a couple of weeks.
Mark.
Dale Strickland-Clark wrote:
> This is turning into a bit of a puzzle. I posted about the problem a
> while ago but didn't get much response. We really need to sort this
> out now.
>
> We are trying to store a Python object in the ASP session object but
> it won't play ball. The object retrieved isn't the same as the one
> that went in.
>
> I've reduced the problem to two small modules. One ASP/Python, the
> other pure Python.
>
> The Python module is a simple object with a COM interface. The ASP
> module instantiates the Python object and then tries to wrap it as a
> COM object to store in the ASP Session object.
>
> The output and error is:
>
> 246 -1- 492
> Python ActiveX Scripting Engine error '80020009'
>
> Traceback (most recent call last): File "<Script Block >", line 13, in
> ? objWibble = unwrap(wrapWibble) File
> "C:\Python22\lib\site-packages\win32com\server\util.py", line 36, in
> unwrap ob = pythoncom.UnwrapObject(ob) ValueError: argument is not a
> COM object
>
> ?, line 0
>
> ob = pythoncom.UnwrapObject(ob)
>
> So in summary: what goes into the Session object doesn't seem to come
> out again.
>
> Any and all help gratefully received.
>
> Further info: Python 2.2.2 with Win32all 150 (or 148) on Win2K
>
> ---- COMHarness.asp ----
> <% @Language=Python %>
> <%
> import COMHarness2
> from win32com.server.util import wrap, unwrap
> objWibble = COMHarness2.COMWibble() # Get Object
>
> Response.Write(objWibble.Wibble()) # Test object works
> Response.Flush() # Flush output
>
> wrapWibble = wrap(objWibble) # wrap object in COM wrapper
> objWibble = unwrap(wrapWibble) # unwrap again
>
> Response.Write(" -1- ") # id. output
> Response.Write(objWibble.Wibble()) # test unwrapped object
> Response.Flush()
>
> Session.SetValue("Wibble", wrapWibble) # store wrapped object in
> Session object
>
> wrapWibble = Session("Wibble") # retrieve from session object
> objWibble = unwrap(wrapWibble) # unwrap retrieved object
>
> Response.Write(" -2- ") # id. output
> Response.Write(objWibble.Wibble()) # test unwrapped object.
> Response.Flush()
> %>
> ----------END-----------
>
> ---- COMHarness2.py ----
> class COMWibble:
> _public_methods_ = ['Wibble']
> _public_attrs_ = ['Wobble']
> _reg_progid_ = 'Wibble.Test.1'
> _reg_clsid_ = '{E871E6D2-BCBF-45E3-AF4A-791A7E153070}'
>
> def __init__(self):
> self.Wobble = 123
>
> def Wibble(self):
> self.Wobble *= 2
> return self.Wobble
>
> def Wobble(self):
> return self.Wobble
>
> _value_ = Wobble
>
> if __name__ == '__main__':
> print "Registering COM server..."
> import win32com.server.register as reg
> reg.UseCommandLine(COMWibble)
> ----------END-----------
>
> --
> Dale Strickland-Clark
> Riverhall Systems Ltd
More information about the Python-list
mailing list