On 29/07/2009 4:29 AM, Reinier Heeres wrote:
Hi everybody,
I have a problem with a function of a COM object that is supposed to
return an array of data. The function prototype generated by
win32com's EnsureDispatch is as follows:
def GetFrame(self, frame=defaultNamedNotOptArg,
FrameVariant=defaultNamedNotOptArg):
"""Get Frame Data"""
return self._ApplyTypes_(10, 1, (24, 0), ((2, 1), (16396, 3)),
This is declaring the function has a return type of 24 (VT_VOID), and
takes 2 params - one in param of type 2 (VT_I2) and the other a 'retval'
param of 16396 == 0x400c == VT_BYREF | VT_VARIANT.
u'GetFrame', None,frame
, FrameVariant)
which from my understanding means that the type which gives the
problem is VT_R4 | VT_BSTR | VT_BYREF. (I've seen problems with byref
return values before on the mailing list archives, but I don't know if
they apply here).
The error is slightly undescriptive (snipped a part):
454 def _ApplyTypes_(self, dispid, wFlags, retType,
argTypes, user, resultCLSID, *args):
455 return self._get_good_object_(
--> 456 self._oleobj_.InvokeTypes(dispid, 0,
wFlags, retType, argTypes, *args),
457 user, resultCLSID)
458
com_error: (-2147352567, 'Exception occurred.', (0, None, None, None,
0, -2147024809), None)
I don't exactly understand where the problem is: is it before the call
to the actual COM function while creating an empty object, in the COM
call, or after the call casting the result? Any ideas on how to fix
this would be welcome; I could try to make patches for win32com.
The problem is the COM object returning DISP_E_EXCEPTION with an scode
value of -2147024809 - which in turn is E_INVALIDARG.
BTW: I can get it to work with comtypes (but that gives problems on
some other calls), so in principle it should be possible.
Unfortunately I don't have access to the source of the COM object I'm
using.
I suspect pythoncom is passing the variants described above - but maybe
the variant isn't initialized as expected or something. Do you know
exactly how the variants passed by ctypes were laid out?
Cheers,
Mark
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32