> Hello,
>
> I'm having difficulty passing a VT_UI1 to a COM
> object. I've tried passing a list/tuple of bytes but
> it's raising an exception. When I pass a buffer, there
> is no exception but the returned IAutoLogPacket is
> None. What is "an array of bytes"?
>
> Here is the makepy generated method (I'm certain I'm
> using early bound dispatch):
>
>       # Result is of type IAutoLogPacket
>       def ProcessPacket(self,
> packet=defaultNamedNotOptArg):
>               """packet is an array of bytes"""
>               ret = self._oleobj_.InvokeTypes(32, LCID, 1, (9, 0),
> ((12, 1),),packet
>                       )
>               if ret is not None:
>                       ret = Dispatch(ret, 'ProcessPacket',
> '{568A44F9-6FB2-4814-8195-BCF6F1409288}',
> UnicodeToString=0)
>               return ret

The function is declared as taking a simple variant.  This means that
explicitly passing a buffer object should work - eg, buffer('foo\0bar'), for
example.  (If it was explicitly declared as a VT_ARRAY | VT_UI8, passing a
simple string would work too)

I just made a change to the win32com test suite to confirm this.  testvb.py
was changed to include:

    vbtest.VariantProperty = buffer('raw\0data')
    if str(vbtest.VariantProperty) != 'raw\0data':
        raise error, "Could not set the variant buffer property correctly."

This is similar to your example (although a property is being used instead
of an arg to a method.)  After setting the property to the buffer,
re-reading the value results in an object '<read-write buffer ptr
0x00C5C7C0, size 8 at 0x00C5C7A0>' - hence the conversion to string before
the comparison.  However, this demonstrates to me that VT_UI1 support in
variants is working fine.

Probably the best way forward is to try and reproduce your problem in the
win32com test suite...

Hope this helps,

Mark

_______________________________________________
Python-win32 mailing list
Python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to