On Tuesday 21 July 2009 10:43:14 Phil Thompson wrote: > On Tue, 21 Jul 2009 09:26:39 +0200, "Diez B. Roggisch" <de...@web.de> > > wrote: > > Hi, > > > > well, the subject pretty much says it. The below code exectutes fine in > > the debugger until it reaches the line > > > > irr::video::S3DVertex *vertex = (irr::video::S3DVertex > > *)sipConvertToInstance(py_vertex, S3DVertexType, NULL, SIP_NOT_NONE, > > NULL, &err); > > > > > > where "err" then gets some seemingly random value & the program > > terminates. The if-statement below the line doesn't work and was a > > feeble attempt at error-handling - a subject that is given not much more > > information in the whole > > > > http://www.riverbankcomputing.com/static/Docs/sip4/c_api.html > > > > page. > > > > Any suggestions? Ah, python is 2.6 on osx, SIP is 4.7.9. > > > > > > Diez > > > > > > void append(SIP_PYLIST, SIP_PYLIST); > > %MethodCode > > PyObject *py_vertices = a0; > > PyObject *py_indices = a1; > > irr::u32 numVertices = PyList_Size(py_vertices); > > irr::video::S3DVertex *vertices = (irr::video::S3DVertex > > *)sipMalloc(sizeof(irr::video::S3DVertex) * numVertices); > > irr::u32 numIndices = PyList_Size(py_indices); > > irr::u16 *indices = (irr::u16*)sipMalloc(sizeof(irr::u16) * > > numIndices); > > > > sipWrapperType *S3DVertexType = > > sipFindClass("irr::video::S3DVertex"); > > > > int err; > > > > for(irr::u32 i=0; i < numVertices; i++) { > > PyObject *py_vertex = PyList_GetItem(py_vertices, i); > > if(sipCanConvertToInstance(py_vertex, S3DVertexType, SIP_NOT_NONE)) { > > irr::video::S3DVertex *vertex = (irr::video::S3DVertex > > *)sipConvertToInstance(py_vertex, S3DVertexType, NULL, SIP_NOT_NONE, > > NULL, &err); > > if(err) { > > return -1; > > } > > vertices[i] = *vertex; > > } // TODO: raise an exception here! > > } > > > > for(irr::u32 i=0; i < numIndices; i++) { > > PyObject *py_index = PySequence_GetItem(py_indices, i); > > irr::u16 indices[3]; > > for(int j=0; j < 3; j++) { > > PyObject *item = PySequence_GetItem(py_index, j); > > if(PyLong_Check(item)) { > > indices[j] = (irr::u16)PyLong_AsLong(item); > > } else { > > // TODO: raise an exception here! > > } > > } > > } > > sipCpp->append((void*)vertices, numVertices, indices, numIndices); > > sipFree(indices); > > sipFree(vertices); > > %End > > What is S3DVertexType? I would expect it to start with 'sipClass_'.
It's a wrapped structure, with the original name "irr::video::S3DVertex". After reading the aforementioned docs, I was under the impression that I need to get a sipTypeDef to check & convert. At least pointers of that kind are taken from sipConvertToInstance and sipCanConvertToInstance. Diez _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt