[ctypes-commit] ctypes/docs/manual tutorial.txt,1.36,1.37
Brought to you by:
theller
From: Thomas H. <th...@us...> - 2006-06-18 21:20:03
|
Update of /cvsroot/ctypes/ctypes/docs/manual In directory sc8-pr-cvs4.sourceforge.net:/tmp/cvs-serv21679 Modified Files: tutorial.txt Log Message: Some small corrections. Remove code samples that shows '._objects'. Index: tutorial.txt =================================================================== RCS file: /cvsroot/ctypes/ctypes/docs/manual/tutorial.txt,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** tutorial.txt 18 Jun 2006 14:55:04 -0000 1.36 --- tutorial.txt 18 Jun 2006 21:19:54 -0000 1.37 *************** *** 718,727 **** Usually, ctypes does strict type checking. This means, if you have ! ``POINTER(c_int)`` in the ``argtypes`` list of a function or in the ! ``_fields_`` of a structure definition, only instances of exactly the ! same type are accepted. There are some exceptions to this rule, where ! ctypes accepts other objects. For example, you can pass compatible ! array instances instead of pointer types. So, for ``POINTER(c_int)``, ! ctypes accepts an array of c_int values:: >>> class Bar(Structure): --- 718,727 ---- Usually, ctypes does strict type checking. This means, if you have ! ``POINTER(c_int)`` in the ``argtypes`` list of a function or as the ! type of a member field in a structure definition, only instances of ! exactly the same type are accepted. There are some exceptions to this ! rule, where ctypes accepts other objects. For example, you can pass ! compatible array instances instead of pointer types. So, for ! ``POINTER(c_int)``, ctypes accepts an array of c_int:: >>> class Bar(Structure): *************** *** 729,737 **** ... >>> bar = Bar() - >>> print bar._objects - None >>> bar.values = (c_int * 3)(1, 2, 3) - >>> print bar._objects - {'1': ({}, <ctypes._endian.c_long_Array_3 object at ...>)} >>> bar.count = 3 >>> for i in range(bar.count): --- 729,733 ---- *************** *** 752,758 **** Sometimes you have instances of incompatible types. In ``C``, you can cast one type into another type. ``ctypes`` provides a ``cast`` ! function which can be used in the same way. The Bar structure defined ! above accepts ``POINTER(c_int)`` pointers or ``c_int`` arrays for its ! ``values`` field, but not instances of other types:: >>> bar.values = (c_byte * 4)() --- 748,754 ---- Sometimes you have instances of incompatible types. In ``C``, you can cast one type into another type. ``ctypes`` provides a ``cast`` ! function which can be used in the same way. The ``Bar`` structure ! defined above accepts ``POINTER(c_int)`` pointers or ``c_int`` arrays ! for its ``values`` field, but not instances of other types:: >>> bar.values = (c_byte * 4)() *************** *** 985,989 **** >>> ! So, our array sorted now:: >>> for i in ia: print i, --- 981,988 ---- >>> ! It is quite interesting to see that the Windows ``qsort`` function ! needs more comparisons than the linux version! ! ! As we can easily check, our array sorted now:: >>> for i in ia: print i, *************** *** 995,999 **** Make sure you keep references to CFUNCTYPE objects as long as they are ! used from C code. ctypes doesn't, and if you don't, they may be garbage collected, crashing your program when a callback is made. --- 994,998 ---- Make sure you keep references to CFUNCTYPE objects as long as they are ! used from C code. ``ctypes`` doesn't, and if you don't, they may be garbage collected, crashing your program when a callback is made. *************** *** 1002,1006 **** Sometimes, a dll not only exports functions, it also exports ! values. An example in the Python library itself is the ``Py_OptimizeFlag``, an integer set to 0, 1, or 2, depending on the ``-O`` or ``-OO`` flag given on startup. --- 1001,1005 ---- Sometimes, a dll not only exports functions, it also exports ! variables. An example in the Python library itself is the ``Py_OptimizeFlag``, an integer set to 0, 1, or 2, depending on the ``-O`` or ``-OO`` flag given on startup. |