Hi,
--- On Mon, 1/26/09, Gamze Tunali gdtunali@yahoo.com wrote:
From: Gamze Tunali gdtunali@yahoo.com Subject: [capi-sig] Passing an object from script to C code To: capi-sig@python.org Date: Monday, January 26, 2009, 9:56 PM
As a beginner, I have a question about passing a class instance from Python script to my C code. What I am doing is basically creating a class in the script:
class dbvalue: def __init__(self, index, type): self.id = index # unsigned integer self.type = type # string
last_roi = dbvalue(id, type); bmdl_batch.set_input_from_db(1, last_roi); <--------
I would like to call my C function with last_roi and able to recover id and type in the code. The C part is follows:
PyObject *set_input_from_db(PyObject* self, PyObject *args) { unsigned input; PyObject *obj;
if (!PyArg_ParseArg(args, "iO:set_input_from_db", &input, &obj)) return NULL;
.... }
I am not sure if PyArg_ParseArg() is the right method to get the object.
It will work, but you should use PyArg_ParseTuple[1] instead, for the reasons explained in the api reference[2].
[1] http://docs.python.org/c-api/arg.html#PyArg_ParseTuple [2] http://docs.python.org/c-api/arg.html#PyArg_Parse
I used "O:.." to get it but after that, how do I acces index and type fields of the object. Do I create an equivalent class/struct in C code to? Again, all I want is pass the 2 values together in an object and able to recover then in C code.
You can use PyObject_GetAttr (or PyObject_GetAttrString) from the Object protocol [3] to access attributes of an object.
Once you got your attribute, lets say your id field is a Python Integer which you want to convert to a C int, you can use the Integer object layer for that [4].
[3] http://docs.python.org/c-api/object.html [4] http://docs.python.org/c-api/int.html
Hopefully, that pointed you in the right direction.
Martin