快速业务通道

C++扩展和嵌入Python

作者 佚名技术 来源 程序设计 浏览 发布时间 2012-06-30
    pmod = PyImport_ImportModule(const_cast(mod_name));
      if(pmod==NULL)
        return false;
      pdict = PyModule_GetDict(pmod);
    }
    catch(...)
    {
      return false;
    }
    if(pmod!=NULL && pdict!=NULL)
      return true;
    else
      return false;
  }
  ///Executes the Python source code from command in the __main__ module.
  ///If __main__ does not already exist, it is created.
  ///Returns 0 on success or -1 if an exception was raised.
  ///If there was an error, there is no way to get the exception information.
  int Run_SimpleString(const char* str)
  {
    return PyRun_SimpleString(const_cast(str) );
  }
  ///PyRun_String("message", Py_eval_input, pdict, pdict);
  ///Execute Python source code from str in the context specified by the dictionaries globals.
  ///The parameter start specifies the start token that should be used to parse the source code.
  ///Returns the result of executing the code as a Python object, or NULL if an exception was raised.
  string Run_String(const char* str)
  {
    char *cstr;
    pstr = PyRun_String(str, Py_eval_input, pdict, pdict);
    if(pstr==NULL)
      throw ("when Run_String, there is an exception was raised by Python environment.");
    PyArg_Parse(pstr, "s", &cstr);
    return string(cstr);
  }
  ///support olny one parameter for python function, I think it''''s just enough.
  string CallObject(const char* func_name, const char* parameter)
  {
    pfunc=NULL;
    pfunc = PyObject_GetAttrString(pmod, const_cast(func_name));
    if(pfunc==NULL)
      throw (string("do not found in Python module for: ")
+func_name).c_str();
    char* cstr;
    pargs = Py_BuildValue("(s)", const_cast(parameter));
    pstr = PyEval_CallObject(pfunc, pargs);
    if(pstr==NULL)
      throw ("when PyEval_CallObject, there is an exception was raised by Python environment");
    PyArg_Parse(pstr, "s", &cstr);
    return string(cstr);
  }
  //PyObject *args;
  //args = Py_BuildValue("(si)", label, count);  /* make arg-list */
  //pres = PyEval_CallObject(Handler, args);
protected:
  PyObject *pstr, *pmod, *pdict;
  PyObject *pfunc, *pargs;
};
#endif // _SIMPLEPY_H_
// end of file

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号