python调用c/c++
2016-06-16 00:09
423 查看
以下的例子摘自《python核心编程》
目的:windows 下 Python调用c 语言的函数
Function 1:int fac(int n);
Function 2: char * reverse(char *s);
Function 3: int test();
Step one:创建Extest.c
step two: 创建编译文件
step three: 进入python编译
python setup.py build
然后就会在 相应目录下 生成一个 build文件夹,,,,看到 xxx.pyd,lib 之类
step four:使用接口
把库的目录加入呗
目的:windows 下 Python调用c 语言的函数
Function 1:int fac(int n);
Function 2: char * reverse(char *s);
Function 3: int test();
Step one:创建Extest.c
/************************************************************************* > File Name: Extest.c > Author: --- > Mail: --- > Created Time: --- ************************************************************************/ #include<stdio.h> #include<stdlib.h> #include<string.h> int fac(int n) { if (n < 2) return 1; return n*fac(n-1); } char * reverse(char * s) { register char t; register char *p = s; register char *q = (s + (strlen(s) - 1)); while (s && (p < q)) { t = *p; *p++ = *q; *q-- = t; } return s; } int test() { char s[15]; printf("4 != %d\n", fac(4)); printf("8 != %d\n", fac(8)); strcpy(s, "abcdef"); printf("reserving 'abcdef', we get %s\n", reverse(s)); strcpy(s, "madam"); printf("reserving 'madam', we get %s\n", reverse(s)); return 0; } ///////////////////////////////////////////////////// #include "python.h" ///< python 把所有对象看做是PyObject static PyObject * Extest_fac(PyObject * self, PyObject * args) { int num; if (!PyArg_ParseTuple(args, "i", &num)) return NULL; return (PyObject*)(Py_BuildValue("i", fac(num))); } static PyObject * Extest_doppel(PyObject * self, PyObject * args) { char * orig_str; char * dupe_str; PyObject * retval; if (!PyArg_ParseTuple(args, "s", &orig_str)) return NULL; dupe_str = reverse(strdup(orig_str)); retval = (PyObject*)(Py_BuildValue("ss", orig_str, dupe_str)); free(dupe_str); return retval; } static PyObject * Extest_test(PyObject * self, PyObject * args) { test(); return (PyObject *)(Py_BuildValue("")); } ///< 导出的函数明 fac、doppel、test static PyMethodDef ExtestMethods[] = { {"fac", Extest_fac, METH_VARARGS}, {"doppel", Extest_doppel, METH_VARARGS}, {"test", Extest_test, METH_VARARGS}, {NULL, NULL}, }; void initExtest() { Py_InitModule("Extest", ExtestMethods); }
step two: 创建编译文件
#!/usr/bin/env python # coding=utf-8 from distutils.core import setup, Extension Mod = 'Extest' FileName = 'Extest.c' setup(name = Mod, ext_modules=[ Extension(Mod , sources=[FileName ])])
step three: 进入python编译
python setup.py build
然后就会在 相应目录下 生成一个 build文件夹,,,,看到 xxx.pyd,lib 之类
step four:使用接口
把库的目录加入呗
import sys sys.path.append(....) import Extest help(Extest)
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- 如何组织构建多文件 C 语言程序(二)
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 如何写好 C main 函数
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例