DZone Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world
Calling A S60 Python Function From Symbian C++
Calls the Python function 'foo' in the module 'Bar'.
A string value is passed to the Python function, and a string value is returned
TInt retVal(KErrNone);
// Create a Python interpreter
CSPyInterpreter* it = CSPyInterpreter::NewInterpreterL();
CleanupStack::PushL(it);
// Save state of any current Python interpreter, and acquire the
// interpreter lock
PyEval_RestoreThread(PYTHON_TLS->thread_state);
char *module_name = "Bar" ;
char *foo = "foo" ;
char *response = NULL ;
TInt32 r_len = 0 ;
PyObject *pModule = PyImport_ImportModule(module_name) ;
if ( pModule != NULL )
{
LOG_WRITE_L("CSenPythonSession::loaded ServiceConnection");
PyObject *module_dict = PyModule_GetDict(pModule);
PyObject *expression = PyDict_GetItemString(module_dict, pre_handler);
PyObject *arglist = Py_BuildValue("(s#)", aString.Ptr(),aString.Length()) ;
PyObject *result = PyEval_CallObject(expression, arglist);
response = PyString_AsString( result ) ;
r_len = strlen( response ) ;
}
// Make a Symbian descriptor pointer to the char * response
TPtrC8 symResponse((TUint8*)response, r_len ) ;
// Clean-up, and restore thread state
PyEval_SaveThread();
CleanupStack::PopAndDestroy(it);





Comments
Snippets Manager replied on Wed, 2007/04/11 - 8:56pm