c++能调用python吗,c程序调用python

  c++能调用python吗,c程序调用python

  C或C调用python一般可以通过使用python自己的库来完成。首先添加python.h的头文件,链接时添加相应的库。

  但是在C/C程序中使用python的类时,会遇到很多坑,在网上搜索会得到很多类似的方法,如下图。

  首先声明,以下的方法是有问题的,有问题的地方我会使用红字标出

  注: 下述所有导入方法在导入失败时不会报错, 只会返回空指针.

  第一步是导入。py文件:

  使用PyObject* pModule存储导入的。py文件模块。被调用的方法是py import _ import module(path):py object * p module=py import _ import module( testpy );使用PyObject* pDict在导入模块中存储方法字典,调用的方法为py module _ get dict(module):py object * pDict=py module _ get dict(p module);这就完成了。py文件。

  第二步是在导入的模块中导入方法或类:

  获取方法,调用的方法为pydict _ getitemstring (dict,method name):py object * pfun hi=pydict _ getitemstring(pdct, say hi );获取类并调用与上面相同的方法。请注意,红色主体中的字符串对应于。py文件:py object * pclassssecond=pydict _ getitemstring(PDICT,秒);第三步是使用导入的方法或类:

  用方法,只需调用pyobject _ call函数(pfunc, s ,args): pyobject _ call函数(pfunhi, s , lhb );使用类构造对象,只需调用py instance _ new(pclassssecond,null,null):py object * pinstancesecond=py instance _ new(pclassssecond,null,null);注意pClassSecond是2.2步中获取的类指针的类对象的方法,只需调用py object _ call method(pin instance,methodname, o ,args):py object _ call method(Pinstancesecond, invoke , o ,Pinstanceperson);上面调用中的“s”和“o”代表参数列表的类型。我们可以在Py_BuildValue中找到所有的类型。该表也附在本文的末尾。PyInstance_New是python2使用的函数,而python3使用的是新函数PyInstanceMethod_New。国内很多文章都认为这两个函数返回的是类的实例对象,其实不然。他们返回010-的类。

  当不涉及修改类的成员变量时,遵循上面文章中的步骤没有问题。如果有python类

  类测试:def _ _ init _ _(self):self . I=1 print( init!)def modify(self):self . I=1 def do(self):print(self . I)如果用上面的方法来使用这个类,调用do方法不会有问题,可以打印成功。但是如果调用modify,会得到一个错误,PyErr_Print会打印一个错误信息I不存在。

  并且当PyInstance_New或PyInstanceMethod_New!表示根本没有调用构造函数。

  正确的称呼应该是

  py object * pConstruct=PyInstanceMethod _ New(pClass);py object * pIns=py object _ call object(pConstruct,nullptr);PyObject_CallMethod(pIns, modify ,nullptr);PyObject_CallMethod(pIns, do ,nullptr);在使用PyInstanceMethod_New获得构造函数之前,不能构造对象,调用时也不需要传递自己。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: