zoukankan      html  css  js  c++  java
  • VC调用Python【转】

    来自http://blog.csdn.net/up5p5mm/article/details/2613854

    1.首先安装好python库,设置好相应的include和lib路径:把“PythonWin/include”加入包含路径,把“PythonWin/libs"加入附加库路径,然后在调用python的cpp头中加入:#include "python.h"

    2.调用Py_Initialize初始化python解析器环境

    3.在c中,python所有对象都是PyObject,常用PyObject *.

    4.要把python中的数据类型转化成C中的数据类型,才能在C中使用,同样,返回给python的数据结构也要转成PyObject才能在python中使用(一般返回PyObject*)

    5.使用Py_IsInitialized判断python解析器环境是否初始化成功

    6.用PyRun_SimpleString执行python命令行,如:

      PyRun_SimpleString("import sys")

      返回0表示执行成功

    7.PyObject pObj = PyInitModel("test2",NoticeFunc)等于把NoticeFunc对应的"函数映射数组"映射到python的test2模块中,返回模块地址

      为NULL表示映射失败

      NoticeFunc定义为一个结构体数组:

      PyMethodDef  NoticeFunc[] =   {    {"MaxP",MaxC,METH_VARARGS,"Maxof two args"},    .......   }

      其中MaxP是python中函数名,MaxC是c中回调函数名(实际调用的是它)。METH_VARARGS是参数传递方

    式,表示通过元组传递参数,METH_KEYWORD表示通过字典传递参数

      映射成功后,我们用:

      PyRun_SimpleString("import test2");

      PyRun_SimpleString("print test2.MaxP(1,3)");

      可以执行MaxP函数,表示test2已经植入解析器中

    8.Py_BuildValue("i",2003)把2003转化成python中的数据类型,返回一个PyObject*,可用PyInt_Check检查它

    是否已经转化成了Python中的int

    9.C中每产生一个PyObject,此对象的引数就加1,此对象的引数为0时,解析器会释放内存,可用Py_DECREF

    ()将一个对象的引数减一,如果一个Python对象是返回

      到Python解析器里去,就不要调用Py_DECREF了,如果是Python返回给C使用,则用完后要用此宏自减引用数   10.返回Py_None时要先自加一次:

       Py_INCREF(Py_None);

       return Py_None;

       如果不自加,解析器对Py_None对象的引数为0(实际是1),则Py_None返回给Python解析器后用完不会释放。

    11.用PyArg_ParseTuple(argvs,"ii",&a,&b)把pyton的元组解析成两个整数。

    12.// 清除Python解析环境

       Py_Finalize();

  • 相关阅读:
    vue / js使用video获取视频时长
    vuex的使用
    eclipse中没有tomcat小猫
    Windows下安装Redis服务
    postman上传文件对参数的contentType类型设置方式
    !与&&优先级的问题
    备份数据库中的某个表的数据报错Statement violates GTID consistency
    Error 'Cannot add or update a child row: a foreign key constraint fails故障解决
    解除项目与其他服务的强依赖
    常见的几种异常类型 Exception
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/2403980.html
Copyright © 2011-2022 走看看