c/c++再学习:Python调用C函数

Python 调用C函数比较简单
这里两个例子,一个是直接调用参数,另一个是调用结构体
C代码

typedef struct {int i1;int i2;char str[20];
} core_data_t;__declspec(dllexport) int add(int a, int b)
{return a + b;
}__declspec(dllexport) int multi(int a, int b)
{return a * b;
}__declspec(dllexport) int struct_add(core_data_t* data)
{printf("%s\n", data->str);return data->i1 + data->i2;
}

python代码

from ctypes import *core = CDLL('core.dll')add_val = core.add(1, 2)
multi_val = core.multi(2, 3)print(add_val)
print(multi_val)class CoreData(Structure):_fields_ = [("i1", c_int),("i2", c_int),("str", c_char*20)]coredata = CoreData()
coredata.i1 = 10
coredata.i2 = 20
coredata.str = b"hello world"
coredata_ptr = byref(coredata)
struct_add_val = core.struct_add(coredata_ptr)print(struct_add_val)

结果

3
6
30
hello world

C调用python函数

c调用python,需要在增加<Python.h>和python36.lib,有时遇到编译时需要python36_d.lib时,只需要将python36.lib复制重命名为python36_d.lib放在同目录下即可

python代码

def py_print():print("py_print")def py_add(a,b):return a+b

c代码

#include "stdio.h"
#include "windows.h"
#include <Python.h>   void main()
{Py_Initialize();                  PyObject* pModule = NULL;        PyObject* pFunc = NULL;        PyObject* pArgs = NULL;PyObject* pValue = NULL;pModule = PyImport_ImportModule("python_demo");          pFunc = PyObject_GetAttrString(pModule, "py_print");   PyEval_CallObject(pFunc, NULL);   pFunc = PyObject_GetAttrString(pModule, "py_add");pArgs = PyTuple_New(2);PyTuple_SetItem(pArgs, 0, Py_BuildValue("i", 5));PyTuple_SetItem(pArgs, 1, Py_BuildValue("i", 10));pValue = PyEval_CallObject(pFunc, pArgs);int res = 0;PyArg_Parse(pValue, "i", &res);printf("res %d\n", res);Py_Finalize();   return;
}

结果

py_print
res 15

转载于:https://www.cnblogs.com/langzou/p/8982426.html

c/c++再学习:C与Python相互调用相关推荐

  1. c# python 相互调用_【GhPython】Python如何使用“委托”和lambda表达式

    [版权声明] | 作者:月之眼 | 首发于大水牛参数化设计平台 | 如需转载请联系作者 | 如果觉得文章不错,欢迎分享  函数作为参数传入  在python中函数是能作为参数输入函数的.这个有点类似于 ...

  2. python 调用 tensorflow,C++与python 相互调用-- c++调用tensorflow教程

    目前深度学习越来越火,学习.使用tensorflow的相关工作者也越来越多.但是目前绝大部分的python都是拥有着丰富的python的API,而c++的API不够完善.这就导致绝大多是使用tenso ...

  3. python文件调用python文件_自己写的python文件如何相互调用

    自己写的python文件如何相互调用?Python中的模块库十分常用,对于常用的模块可以自己动手自定义,但是如何进行调用呢? 模块相互调用 同级目录调用时的两种方法import module prin ...

  4. php java python容易入门_先学习Python之后再学习PHP与java会更好吗

    学过python语言之后在去学习PHP javascript 这些编程语言是不是会更好的能快速理解, 有python基础之后,再去学习php语言 理解上 是不是更方便上手, 我现在主要想学习专研 PH ...

  5. python和c学习-学习 Python与C相互调用

    缘由 稀里糊涂的,用 Python 或用 C++ Qt都能写点小程序出来.然后对Python + Qt开始有点兴趣:想学PyQt4,想了解PythonQt,也期待PySide的Windows版本.但总 ...

  6. python structure_GitHub - CYZYZG/Data_Structure_with_Python: 这是我在学习《基于Python的数据结构》的时候的笔记与代码...

    Data_Structure_with_Python 这是我在学习<基于Python的数据结构>的时候的笔记与代码 主要参考:数据结构与算法(Python) 对于算法的时间效率,我们可以用 ...

  7. Python与C之间的相互调用

    Python与C之间的相互调用(Python C API及Python ctypes库) 分类: [Python]2010-01-24 17:58 32468人阅读 评论(11) 收藏 举报 pyth ...

  8. 我们如何学习:学会学习再学习

    我们如何学习:学会学习再学习 学习方法:不同科目不同方法 人和人学习能力的差距在哪里? 快速学习:我不是会得多,只是学得快 学习动力:培养啥耐心呀,你真的有欲望要做的事,八头牛都拉不住你 激发好奇心: ...

  9. 【学习笔记】PYTHON语言程序设计(北理工 嵩天)

    1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则     摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...

  10. python源码学习_【Python学习】Python源码阅读(一)

    最近想读读Python源码,任何东西学习方法基本都是一样的,先从总体框架进行了解,再从自己侧重的方面逐步深入. 1. Python总体架构 左边是Python提供的大量的模块.库以及用户自定义的模块. ...

最新文章

  1. Redis 桌面管理工具 RedisDesktopManager 2019.0 发布
  2. mysql join查询
  3. Android 三角形控件
  4. Python三元运算
  5. npm run serve后台运行的命令写法
  6. 驱动面试、笔试常见问题
  7. 滤波器开发之三:基于算数平均的阶进平滑滤波器
  8. (4)编写一个程序,输出三角形字符阵列图形
  9. linux 查tls模块,TLSSLed · Kali Linux Tools Documents · 看云
  10. Spring: @Import @ImportResource引入资源
  11. 《算法》第四版官网库及数据文件
  12. 热敏打印机排版—打印机的指令
  13. 单向流动的拓扑结构_六种基本网络拓扑结构
  14. android 拨打带有分机号的电话
  15. 25.有5个人做在一起, 问第五个人多少岁? 他说比第四个人大2岁. 问第四个人岁数, 他说比第是三个人大2岁. 问第三个人, 又说比第二人大两岁. 问第二个人, 说比第一个人大两岁. 最后问第一个人
  16. 计算机网络学术期刊,中国计算机学会推荐的计算机网络方向国际学术会议与国际学术期刊...
  17. Ubuntu 20.04 搜狗输入法安裝
  18. PF_PACKET环形接收缓存
  19. 杜拉拉职场速腾三十六招
  20. 用adb连接手机出现List of devices attached

热门文章

  1. 深度 | 机器学习敲门砖:任何人都能看懂的TensorFlow介绍【转】
  2. 容易忘记的linux命令之rpm
  3. 开源监控——cacti
  4. 调试内核Ubuntu 搭建嵌入式开发环境-续
  5. 支持!解决卡巴斯基程序错误及程序断开的问题!
  6. perf-应用程序的调优与使用
  7. linux scp(ssh)免密发送(登陆)配置方法
  8. Windows下编译FFmpeg-2.6.1详解
  9. 2.两数相加(leetcode-2)
  10. Dijkstra算法(朴素,堆优化)+例题