On Oct 10, 7:59 pm, Gordon Allott <[EMAIL PROTECTED]> wrote: > Aaron "Castironpi" Brady wrote: > > Yes, well said. But no, not true, not necessarily. You can choose/ > > change return types with your code. If the call is defined already > > and you can't change the return, just define a new one that returns > > long. > > -- > >http://mail.python.org/mailman/listinfo/python-list > > the problem is that the pointer or long or whatever it is thats returned > won't be the data I am after. the code for PyCObject_FromVoidPtr is as > follows: > > PyObject * > PyCObject_FromVoidPtr(void *cobj, void (*destr)(void *)) > { > PyCObject *self; > > self = PyObject_NEW(PyCObject, &PyCObject_Type); > if (self == NULL) > return NULL; > self->cobject=cobj; > self->destructor=destr; > self->desc=NULL; > > return (PyObject *)self; > > } > > it obviously creates a new PyObject and returns that, which has already > happened once (the address I am after is passed to python via > PyCObject_FromVoidPtr(adress_i_am_after, NULL), doing that puts the > address I am after into the .cobject attribute of a new pyobject > structure and passes that to the python script via the 'display' key in > a dictionary. > > If I were to then take the pycobject in this display key and pass it via > ctypes into PyCObject_FromVoidPtr it would simply create a new pycobject > and put a pointer to the old pycobject in the new pycobject's .cobject > attribute. it just means that I am getting further and further away from > where I want to be surely? if I were to take the current pointer at this > stage, to get to the address I actually want in C it would have to > follow something along the lines of > long address_i_want = (long)(new_pycobj->cobject->cobject); > > What would be great is if there is some easy simple way of accessing the > .cobject attribute of the first pycobject thats passed via the > dictionary to python. > > -- > Gord Allott ([EMAIL PROTECTED]) > > signature.asc > < 1KViewDownload
You are hard to follow. There is the 'cast' function, which I've had some success with, even in adding pointers and offsets. It took a look at the code for it though, and calling an undocumented version of it. I can post that later if you don't have luck the same. You can write extension modules to do that as well, and there's always a Google search which personally I forget half the time too. Last, you haven't mentioned an attempt with PyCObject_AsVoidPtr yet: void* PyCObject_AsVoidPtr(PyObject* self) Return the object void * that the PyCObject self was created with. Where does that get you? -- http://mail.python.org/mailman/listinfo/python-list