[C++-sig] Converintg C++ object to python object

Jadhav, Alok alok.jadhav at credit-suisse.com
Thu Dec 10 02:39:10 CET 2009


I SOLVED IT ... 
thanks for people who provided me help .. but i believe solved it
myself. .haha .. took me long time.. 

so .. the solution is something like this.. 

in my c function ..which calls python call .. 

[code]
PyObject *argobj = SWIG_NewPointerObj(SWIG_as_voidptr(&msg2),
SWIGTYPE_p_RFAMessageWrapper, SWIG_POINTER_NEW |  0 );
 try {
  arglist = Py_BuildValue("(O)",argobj);             // Build argument
list
  PyEval_CallObject(func,arglist);     // Call Python
 } catch (...) {
  cout<<"Unknown exception..."<<endl;
 }
[\code]

I am using 
PyObject *argobj = SWIG_NewPointerObj(SWIG_as_voidptr(&msg2),
SWIGTYPE_p_RFAMessageWrapper, SWIG_POINTER_NEW |  0 );

This was incorrect... i guess SWIG_POINTER_NEW is used to create pointer
to the actual c++ object where as if I pass 0

PyObject *argobj = SWIG_NewPointerObj(SWIG_as_voidptr(&msg2),
SWIGTYPE_p_RFAMessageWrapper, 0 |  0 );

This actually creates a pointer to the wrapped python object :)

I could access my object in my python code now.


I had to include std_string.i to enable string typemaps :)


Thanks,
Alok 

-----Original Message-----
From: cplusplus-sig-bounces+alok.jadhav=credit-suisse.com at python.org
[mailto:cplusplus-sig-bounces+alok.jadhav=credit-suisse.com at python.org]
On Behalf Of Jadhav, Alok
Sent: Wednesday, December 09, 2009 1:55 PM
To: Development of Python/C++ integration
Subject: Re: [C++-sig] Converintg C++ object to python object


When I pass a C++ object to Python function, I want to be able to use
that object using its Proxy class in the python code. How can I achieve
that?

Regards, Alok

 

-----Original Message-----
From: cplusplus-sig-bounces+alok.jadhav=credit-suisse.com at python.org
[mailto:cplusplus-sig-bounces+alok.jadhav=credit-suisse.com at python.org]
On Behalf Of Jadhav, Alok
Sent: Wednesday, December 09, 2009 10:13 AM
To: Development of Python/C++ integration
Subject: [C++-sig] Converintg C++ object to python object

In my C++ callback function below

[code]

static void PythonCallBack(RFAMessage *msg, void *clientdata) {
   PyObject *func, *arglist;
   PyGILState_STATE state; 
   state = PyGILState_Ensure();
   func = (PyObject *) clientdata;               // Get Python function
   RFAMessageWrapper msg2(msg);
 
   PyObject *argobj = SWIG_NewPointerObj(SWIG_as_voidptr(&msg2),
SWIGTYPE_p_RFAMessageWrapper , SWIG_POINTER_NEW |  0 );
  
   arglist = Py_BuildValue("(O)",argobj);             // Build argument
list
   PyEval_CallObject(func,arglist);     // Call Python
  Py_XDECREF(arglist);                           // Trash arglist
   //SWIG_PYTHON_THREAD_END_BLOCK;
   PyGILState_Release(state);
}

[/code]

Can you tell me if the usage of  SWIG_NewPointerObj is correct? I want
to convert a C++ class object into python equivalent object. In the
python code, the passed object is identified as SwigPyObject and not
RFAMessageWrapper which I am expecting.

How can I convert RFAMessageWrapper object into its Python equivalent to
that in my Python function I can use the passed object as
RFAMessageWrapper.

Regards,
Alok

========================================================================
=======
 Please access the attached hyperlink for an important electronic
communications disclaimer: 
 http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
 
========================================================================
======= 
 
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig at python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

========================================================================
=======
 Please access the attached hyperlink for an important electronic
communications disclaimer: 
 http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html
 
========================================================================
======= 
 
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig at python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

=============================================================================== 
 Please access the attached hyperlink for an important electronic communications disclaimer: 
 http://www.credit-suisse.com/legal/en/disclaimer_email_ib.html 
 =============================================================================== 
 


More information about the Cplusplus-sig mailing list