The short answer is that you don't need to: Anything that has a 'handle' attribute that is an int should be fine to pass into the function, and your typemap will be fine (with some additional checking) If you really insist on absolute type safety, however, you'll need an instance of the Pin class to compare to. Actually, all you need is an instance of the Pin Type -- you can use PyObject_TypeCheck (if I recall). Chances are, the name 'Pin' is already in your locals or globals, so you find the object, grab its type, and then check the type. Personally, I wouldn't bother.
________________________________ From: Cooper, Andrew [mailto:[EMAIL PROTECTED] Sent: Tuesday, March 11, 2008 7:34 PM To: python-list@python.org Subject: RE: Obtaining the PyObject * of a class The part I'm having problem with is as follows: I want to replace the 'strcmp' below with a call to PyObject_IsInstance(o, pinClassPyObject) But I don't know how to get the PyObject* for the Pin class that is defined in the %pythoncode section Here is a cut down version of the interface file %module example typedef long pin; typedef unsigned short ushort; ushort wkDefinePin(char *, char *, pin *OUTPUT); %pythoncode { class Pin(object): def __init__(self, name, tic): self.handle = wkDefinePin(name,tic)[1] return } %typemap(in) (pin tp) { // // TODO: really need to change this to IsInstance type code // if(strcmp($input->ob_type->tp_name,"Pin") == 0) { $1 = PyInt_AsLong(PyObject_GetAttrString($input,"handle")); } else { PyErr_SetString(PyExc_TypeError,"arg must be type Pin"); return NULL; } } %typemap(in) (int nCnt_tp, pin *tp) { /* Check if is a list */ if (PyList_Check($input)) { int i; $1 = PyList_Size($input); $2 = (pin *) malloc(($1) * sizeof(pin)); for (i = 0; i < $1; i++) { // // TODO: really need to change this to IsInstance type code // PyObject *o = PyList_GetItem($input,i); if (strcmp(o->ob_type->tp_name, "Pin") == 0) { $2[i] = PyInt_AsLong(PyObject_GetAttrString(o,"handle")); } else { PyErr_SetString(PyExc_TypeError,"list must contain Pins"); free($2); return NULL; } } $2[i] = 0; } else { PyErr_SetString(PyExc_TypeError,"not a list"); return NULL; } } -- http://mail.python.org/mailman/listinfo/python-list From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Bronner, Gregory Sent: 11 March 2008 20:52 To: Michael Wieher; python-list@python.org; [EMAIL PROTECTED] Subject: RE: Obtaining the PyObject * of a class I'd strongly disagree. SWIG is very useful for wrapping large scale projects in a non-interfering manner. If you have to generate bindings for 1000+ classes, it is by far the easiest way to do things. It isn't clear what you are doing that requires the PyObject*, or which one you'd like. In general, the output one is found in $result, and $input is input PyObject for that typemap. ________________________________ From: Michael Wieher [mailto:[EMAIL PROTECTED] Sent: Tuesday, March 11, 2008 3:09 PM To: python-list@python.org Subject: Re: Obtaining the PyObject * of a class 2 things: 1st. there is a python mailing list for people interested in C++ extension type stuff 2nd. SWIG is useless and overly complicated, its much easier to just generate your own C++ code by hand, less confusion, and much more clarity. I find no value in using anything else. People complain about the "boilerplate" code, but honestly, copy & paste, change three characters, and you're done. And you know exactly what is happening, how when and why. 2008/3/11, Chris Mellon <[EMAIL PROTECTED]>: On Tue, Mar 11, 2008 at 12:13 PM, Terry Reedy <[EMAIL PROTECTED]> wrote: > > "Cooper, Andrew" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] > > | Are there any Python C API experts/SWIG experts out there that can help > | me with this issue please. > > | I',m currently using SWIG to generate a python interface to a C DLL. > > Some people have switched to using ctypes for this, and many other SWIG > users have stopped reading clp. But I hope someone answers who can. > Using Pyrex or Cython is likely to be much easier than using SWIG for this. -- http://mail.python.org/mailman/listinfo/python-list - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This message is intended only for the personal and confidential use of the designated recipient(s) named above. If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers. Email transmission cannot be guaranteed to be secure or error-free. Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such. All information is subject to change without notice. -------- IRS Circular 230 Disclosure: Please be advised that any discussion of U.S. tax matters contained within this communication (including any attachments) is not intended or written to be used and cannot be used for the purpose of (i) avoiding U.S. tax related penalties or (ii) promoting, marketing or recommending to another party any transaction or matter addressed herein. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This message is intended only for the personal and confidential use of the designated recipient(s) named above. If you are not the intended recipient of this message you are hereby notified that any review, dissemination, distribution or copying of this message is strictly prohibited. This communication is for information purposes only and should not be regarded as an offer to sell or as a solicitation of an offer to buy any financial product, an official confirmation of any transaction, or as an official statement of Lehman Brothers. Email transmission cannot be guaranteed to be secure or error-free. Therefore, we do not represent that this information is complete or accurate and it should not be relied upon as such. All information is subject to change without notice. -------- IRS Circular 230 Disclosure: Please be advised that any discussion of U.S. tax matters contained within this communication (including any attachments) is not intended or written to be used and cannot be used for the purpose of (i) avoiding U.S. tax related penalties or (ii) promoting, marketing or recommending to another party any transaction or matter addressed herein.
-- http://mail.python.org/mailman/listinfo/python-list