[IronPython] Issue with ctypes arrays of c_ubyte

David Welden dwoogle at gmail.com
Thu Mar 17 22:40:39 CET 2011


OK. Looks like arrays of doubles and ubytes are not processed by IronPython
ctypes as they are in CPython. The error always come back as:
 "expected c_char_Array_1025_Array_1, got c_ubyte_Array_1" or "expected
c_char_Array_1025_Array_1, c_double_Array_1".

If I ignore the 'error' as follows:

try:
    sts = maxl.MaxLColumnDefine(sid, c_ulong(index + 1), pInBuff,
c_ushort(Size), c_ulong(Type), c_ushort(MAX_REC), None, None)
except ArgumentError, e:
    pass

then the output is the same as on CPython. The other deviation I notice is
extracting the value of pBuffer.pszVal. With CPython the correct code is:

print pBuffer.pszVal[0].value

which results in an error in IronPython:

'str' object has no attribute 'value'

IronPython ctypes wants this line to be:

print pBuffer.pszVal[0]

On Tue, Mar 15, 2011 at 1:27 PM, David Welden <dwoogle at gmail.com> wrote:

> I have a ctypes module that is failing under Iron Python. The module is
> hosted at http://essbasepy.googlecode.com if anyone wants to view the
> source.
>
> I have a union defined as:
>
> class output_buffer(Union):
>     _fields_ = [('pdVal', c_double * MAX_REC),
>
>                 ('pbVal', c_ubyte * MAX_REC),
>
>                 ('pszVal', col_t * MAX_REC)]
>
> When attempting to use the pbVal field as follows:
>
> elif pDescr.IntTyp == MAXL_DTINT_BOOL:
>
>     pInBuff = pBuffer.pbVal
>     Type = MAXL_DTEXT_UCHAR
>     Size = 0
> ...
> sts = maxl.MaxLColumnDefine(sid, c_ulong(index + 1), pInBuff, c_ushort(Size), c_ulong(Type), c_ushort(MAX_REC), None, None)
>
> the called c module fails with the following exception:
>
> clsException in System.Collections.ListDictionaryInternal
> e	{*expected c_char_Array_1025_Array_1, got c_ubyte_Array_1*}	object {IronPython.Runtime.Exceptions.PythonExceptions.BaseException}
> Data	{System.Collections.ListDictionaryInternal}	System.Collections.IDictionary {System.Collections.ListDictionaryInternal}
> Message	"expected c_char_Array_1025_Array_1, got c_ubyte_Array_1"	string
> Source	"IronPython.Modules"	string
> StackTrace	"   at IronPython.Modules.ModuleOps.CheckCDataType(Object o, Object type)\r\n   at InteropInvoker(IntPtr , Object , Object , Object , Object , Object , Object , Object , Object , Object[] )\r\n   at CallSite.Target(Closure , CallSite , Object , Object , Object , Object , Object , Object , Object , Object , Object )\r\n   at Microsoft.Scripting.Interpreter.DynamicInstruction`10.Run(InterpretedFrame frame)\r\n   at Microsoft.Scripting.Interpreter.Interpreter.Run(InterpretedFrame frame)\r\n   at Microsoft.Scripting.Interpreter.LightLambda.Run11[T0,T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,TRet](T0 arg0, T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10)\r\n   at Essbase$2._MaxlOutputNextRecord$70(PythonFunction $function, Object self, Object sid, Object ssnInit, Object numFlds) in C:\\Program Files\\IronPython 2.7\\lib\\site-packages\\Essbase.py:line 376"	string
> TargetSite	{CData CheckCDataType(System.Object, System.Object)}	System.Reflection.MethodBase {System.Reflection.RuntimeMethodInfo}
>
> I am a little out of my depth here, so hoping someone understands ctypes in general and the Iron Python implementation in particular.
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ironpython-users/attachments/20110317/16029b26/attachment.html>


More information about the Ironpython-users mailing list