博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
c/c++再学习:C与Python相互调用
阅读量:6229 次
发布时间:2019-06-21

本文共 1850 字,大约阅读时间需要 6 分钟。

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 = 10coredata.i2 = 20coredata.str = b"hello world"coredata_ptr = byref(coredata)struct_add_val = core.struct_add(coredata_ptr)print(struct_add_val)

结果

3630hello 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 
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_printres 15

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

你可能感兴趣的文章
VM VirtualBox安装CentOS 7 64位实践
查看>>
如何搭建一个独立博客——简明Github Pages与Hexo教程
查看>>
OC中Category的注意点
查看>>
OC中的布局-九宫格
查看>>
JAVA网络编程:计算机原理学习
查看>>
ARouter解析三:URL跳转本地页面源码分析
查看>>
git 常用操作
查看>>
iReport 中创建JavaBeanDataSource,用java类提供数据源给iReport
查看>>
大数据时代下的生活
查看>>
spring定时任务(方便轻巧)
查看>>
iOS的主要框架介绍
查看>>
spring源码阅读笔记(一)
查看>>
Selenium的简单安装和使用
查看>>
ios 滤镜
查看>>
linux系统学习第七天-<<工程师技术>>
查看>>
android中利用socket上传文件
查看>>
使用scrapy的定制爬虫-第二章-概
查看>>
【转】常见Java面试题
查看>>
数据库无法创建函数
查看>>
Shell字符串比较
查看>>