[python-win32] Variant ByRef 2D array returned as 1D array
Kevin Patterson
patter001 at gmail.com
Wed Aug 16 15:11:25 CEST 2006
I'm working with a COM module that is returning a 2D array as a
VARIANT BYREF. The 2D array is 30x8 (with each entry being 1 byte)
When the data is returned I'm getting a buffer of length 30. This
tells me that win32com only sees 1D of the array (documentation states
that the buffer is expected for variants-byref with entries of 1
byte). Any ideas on why win32com doesn't see that there is really an
array of arrays?
The author of the code tests with VB so it seems to be working there,
but not with Python. Here's a rough code snippet from the com module
on how it is building the variant that needs to be returned.
long lDimension[2] = {0,0};
SAFEARRAY *dataBuffer = variantReturn.parray;
psaDataBuffer->rgsabound[0].cElements // this is programmed to 8 somewhere
psaDataBuffer->rgsabound[1].cElements // this is programmed to 30 somewhere
// For each field of the entry
for(int outerindex=0; outerindex<30; outerindex++){
lDimension[0] = outerindex;
for(int innerindex=0; innerindex<8; innerindex++){
lDimension[1] = innerindex
SafeArrayPutElement(dataBuffer,lDimension,
&data[outerindex][innerindex])
}
}
// variantReturn is the actuall return that I'm trying to get.
Any ideas?
Thanks,
Kevin
More information about the Python-win32
mailing list