Archived:How to embed Python in Symbian C++
Aquivado: Este artigo foi arquivado, pois o conteúdo não é mais considerado relevante para se criar soluções comerciais atuais. Se você achar que este artigo ainda é importante, inclua o template {{ForArchiveReview|escreva a sua justificativa}}.
All PySymbian articles have been archived. PySymbian is no longer maintained by Nokia and is not guaranteed to work on more recent Symbian devices. It is not possible to submit apps to Nokia Store.
All PySymbian articles have been archived. PySymbian is no longer maintained by Nokia and is not guaranteed to work on more recent Symbian devices. It is not possible to submit apps to Nokia Store.
Article Metadata
It's pretty common to want to extend S60 Python by adding functionality available to the underlying S60 C++ APIs. You can extend Python with C++. But, you can also embed a Python interpreter inside !
Add the following code, which does a lot of setup, but calls the function foo in the module Bar.
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 )
{
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);
#
# module Bar.py
#
# function 'foo' in the module 'Bar'.
# A string value is passed to the Python function
# and a string value is returned
def foo(message):
return 'foo got message: ' + message
link : documentation Python Chapter 9.1 Extending and embedding


10 Sep
2009
Preety.saini - getting errors in above code
I compiled above provided code and encountered 2 errors:
1. undefined identifier 'pre_handler'
2. undefined identifier 'aString'
Will anyone clear there datatypes to mepreety.saini 13:16, 17 July 2012 (EEST)