Hi, On Aug 5, 9:32 pm, Nobody <nob...@nowhere.com> wrote: > I don't know about methods, but it works for functions. > > > Sample code: > > > ... > > G_set_error_routine(byref(self._print_error)) > > This won't work; you have to be more explicit, e.g.: > > errtype = CFUNCTYPE(c_int, POINTER(c_char), POINTER(c_int)) > errfunc = errtype(print_error) > G_set_error_routine(errfunc)
the C function is defined as G_set_error_routine = _libs['grass_gis. 7.0.svn'].G_set_error_routine G_set_error_routine.restype = None G_set_error_routine.argtypes = [CFUNCTYPE(UNCHECKED(c_int), String, c_int)] I defined in Python function print_error() def print_error(self, msg, type): print msg, type and errtype = CFUNCTYPE(UNCHECKED(c_int), String, c_int) errfunc = errtype(print_error) G_set_error_routine(errfunc) unfortunately the application crashes when print_error() is called from C library static void vfprint_error(int type, const char *template, va_list ap) { char buffer[2000]; /* G_asprintf does not work */ vsprintf(buffer, template, ap); G_debug(5, "print_error(): msg = \"%s\" type = %d", buffer, type); print_error(buffer, type); } Any idea how to solve it. Thanks, Martin -- http://mail.python.org/mailman/listinfo/python-list