[Python-3000] Ctypes as cross-interpreter C calling interface

Paul Prescod paul at prescod.net
Fri Aug 11 01:45:00 CEST 2006


Sorry for the cc mistake.


I don't know enough about ctypes, but assuming I have a reason to
> write an extension in C (e.g. Tkinter, which uses the Tcl/Tk API), how
> to I use ctypes to call things like PyDict_GetItem() or
> PyErr_SetString()?


There are two answers to your question. The simplest is that if you have a
dict object called "foo" you just call 'foo["abc"]'. It's just Python. Same
for the other one: you'd just call 'raise'.

Ctypes is the opposite model of the standard extension stuff. You're writing
in Python so Python stuff is straightforward (just Python) and C stuff is a
bit weird. So if you had to populate a Python dictionary from a C struct
then it is the reading from the C struct that takes a bit of doing. The
writing the Python dictionary is straightforward.

If there was a reason to call PyDict_GetItem directly (performance maybe???)
then that's possible. You need to set up the function prototype (which you
would probably do in a helper library) and then you just call
PyDict_GetItem. CTypes would coerce the types. py_object is a native data
type.

So I think it ends up looking like

from PythonConvenienceFunctions import PyDict_GetItem

obj = {}
key = "Guido"

rc = PyDict_GetItem(obj, key)

I'm sure an expert will correct me if I'm wrong...

 Paul Prescod
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/python-3000/attachments/20060810/d4b50a3e/attachment.html 


More information about the Python-3000 mailing list