Python extending with C --- segmentation fault
etsang at my-deja.com
etsang at my-deja.com
Fri Sep 17 23:52:11 EDT 1999
Problem found by Michael P. Reilly:
He found that I should have passed in &string_from_Python instead of
string_from_Python in that function calls.
As a reply to share
In article <7rubrd$t2s$1 at nnrp1.deja.com>,
etsang at my-deja.com wrote:
> Hey, I am trying to initialise a C structure from Python.
> My Aim is to init a C structure without passing each indivual elements
> through the interface, but rather package the whole thing and pass
that
> it one time. Then the C may do somethign about it, initialise its won
> struct and pass back a struct with the same kind of elements but with
> different parameters. I am stuck with the intialising the C struct
> part, and have not clue how to convert the C struct back to a PyObject
> appropriate to pass back to the Python script. Please help . Below is
> the code.
> Error: segmentation fault occurres at
> PyArg_ParseTuple(args,"s:mymath",string_from_Python))
> PyString_Size(string_from_Python)calls inside > function
> pyfunc_mystruct
>
> Here is what I tried:
> From the python script I have:
> import struct
> import mymath_wrapper
> fmt = "120sf"
> a=255
> b='knights who say ni'
> c=3.14159011841
> data = struct.pack(fmt,a,b,c)
> mymath_wrapper.mystruct(data)
>
> in my mymath_wrapper.c file I have:
> #include <Python.h>
> #include "mymath.h"
> PyObject* pyfunc_mystruct(self, args)
> PyObject *self, *args;
> {
> PyObject* string_from_Python;
> if(!PyArg_ParseTuple(args,"S:mymath",string_from_Python))
> return NULL;
> if(PyString_Size(string_from_Python)!= sizeof(struct diffstruct)) {
> PyErr_SetString(PyExc_AssertionError, "Given strgin not a
> good size");
> return NULL; }
> globaldiffstruct = (diffstruct*)PyString_AsString(string_from_Python);
> printf("globaldiffstruct calling within C:%d %s %
f\n",globaldiffstruct-
> >a, globaldiffstruct->b,globaldiffstruct->c);
> /* python side will print the last res value*/
> return string_from_Python; /* not correct, deal with this later */ }
> static PyMethodDef mymathMethods[] = {
> {"mystruct", pyfunc_mystruct, 1},
> {NULL,NULL}> };
>
> void initmymath_wrapper() {
> (void) Py_InitModule("mymath_wrapper", mymathMethods);
> }
>
> Sent via Deja.com http://www.deja.com/
> Share what you know. Learn what you don't.
>
Sent via Deja.com http://www.deja.com/
Share what you know. Learn what you don't.
More information about the Python-list
mailing list