+
+int ePython::call(PyObject *pFunc, PyObject *pArgs)
+{
+ int res = -1;
+ PyObject *pValue;
+ if (pFunc && PyCallable_Check(pFunc))
+ {
+ pValue = PyObject_CallObject(pFunc, pArgs);
+ if (pValue != NULL)
+ {
+ if (PyInt_Check(pValue))
+ res = PyInt_AsLong(pValue);
+ else
+ res = 0;
+ Py_DECREF(pValue);
+ } else
+ {
+ PyErr_Print();
+ }
+ }
+ return res;
+}
+
+PyObject *ePython::resolve(const std::string &pythonfile, const std::string &funcname)
+{
+ PyObject *pName, *pModule, *pDict, *pFunc;
+
+ pName = PyString_FromString(pythonfile.c_str());
+
+ pModule = PyImport_Import(pName);
+ Py_DECREF(pName);
+
+ if (pModule != NULL)
+ {
+ pDict = PyModule_GetDict(pModule);
+ pFunc = PyDict_GetItemString(pDict, funcname.c_str());
+ Py_XINCREF(pFunc);
+ Py_DECREF(pModule);
+ return pFunc;
+ } else
+ {
+ if (PyErr_Occurred())
+ PyErr_Print();
+ return 0;
+ }
+}