Yes, it does look like the in type map ignores the out typemap's tuple and tries to convert it into a pointer. That won't work. It should be something like
if (! PyTuple_Ceck($input)) return NULL; GncOwnerType type = (GncOwnerType)PyLong_asLong(PyTuple_GetItem($input, 0)); PyObject* py_instance = PyTuple_GetItem($input, 1); void* instance = NULL; GncOwner* owner = gncOwnerNew() switch (type) { case GNC_OWNER_CUSTOMER: if (SWIG_ConvertPtr(py_instance, &instance, $descriptor(GncCustomer *), SWIG_POINTER_EXCEPTION)) == 0) { gncOwnerInitCustomer(owner, (GncCustomer *)instance); $1 = owner; } /* ... */ } /* Something failed */ gnc_owner_free(owner); PyErr_SetString( PyExc_ValueError, "Python object passed to function with GncOwner * argument " "couldn't be converted back to pointer of that type"); $1 = NULL; That's untested off the top of my head, obvs you need to fill in the other types. It should correctly make a GncOwner* to pass back to functions that take one. Now if you actually need the instance pointer you'll want to write a typemap(in) for each one that you need. It will probably be cleanest to extract the tuple item in python and pass that, letting the new %typemap(in) convert it to a C pointer. Geert, those typemaps are yours, written 11 years ago. Any comments? Regards, John Ralls > On Jan 29, 2023, at 5:38 AM, Steve Brown <sbr...@opensat.com> wrote: > > I get a Python GncOwner object returned to Python. It appears well > formed. > > owner: <class 'gnucash.gnucash_core.GncOwner'> > <gnucash.gnucash_core.GncOwner object at 0x7f33d4cc3050> > owner_instance: <class 'tuple'> (4, <Swig Object of type 'GncVendor *' at > 0x7f214b5a9500>) > > It's not clear how to easily inspect the Swig object. > > However, the object doesn't convert back to C. It's not recognized as > GncVendor. > > I get: > > ValueError: Python object passed to function with GncOwner * argument > couldn't be converted back to pointer of that type > > The out typemap for GncOwner looks correct. However, I can't see how > the in typemap gets the swig wrapper object from the tuple created by > the out typemap. > > I can recreate the problem in simple_business_create.py with the > attached patch. > > If there is nothing obviously wrong with the typemaps, how should I go > about debugging this? > > Thanks, > Steve > <getaddr.patch>_______________________________________________ > gnucash-devel mailing list > gnucash-devel@gnucash.org > https://lists.gnucash.org/mailman/listinfo/gnucash-devel _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel