[python-win32] What is Variant VT_UI1 in Python?

S. S. Hares shoaev_hares at yahoo.com
Tue Oct 17 17:11:11 CEST 2006


Thanks very much Mark!

The buffer does work, it turns out I was using the COM
object improperly. (Oops, sorry)

--- Mark Hammond <mhammond at skippinet.com.au> wrote:

> > 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
> 
> 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 


More information about the Python-win32 mailing list