一、

main.cpp

#include

#include "Python.h"

static PyObject* Py_Add_Formular(PyObject *self, PyObject *args)

{

PyObject *pObj = NULL;

int nThread = 0, nCalcData = -1, isDebug = 0, isCalcHis = 0;

if (!PyArg_ParseTuple(args, "Oiiii", &pObj, &nThread, &nCalcData, &isDebug, &isCalcHis)) //"Oiiii" O 代表 Object, i 代表 int

{

PyErr_Print();

return NULL;

}

return Py_True;

}

static PyMethodDef EmbMethods[]=

{

{"Add_Formular", Py_Add_Formular, METH_VARARGS, "Add formular."},

{NULL, NULL, 0, NULL}

};

int main()

{

Py_Initialize();

Py_InitModule("DJRJ", EmbMethods); //扩展 DJRJ 模块

PyObject *pModule = NULL;

PyObject *pFunc = NULL;

PyObject *pArg = NULL;

pModule = PyImport_ImportModule("Demo");

pFunc = PyObject_GetAttrString(pModule, "Start");

pArg = Py_BuildValue("(s)", "hello");

PyEval_CallObject(pFunc, pArg);

return 0;

}

Demo.py

#encoding=utf8

import DJRJ

class Test:

def __init__(self):

print "init"

def Start(self):

DJRJ.Add_Formular(self,1,500,0,1)

test = Test()

def Start(s):

print s

test.Start()

效果:

二、将模块生成lib、或直接安装到python库目录

DJRJ模块代码:

DJRJ.cpp

#include

#include "Python.h"

static PyObject* Py_Add_Formular(PyObject *self, PyObject *args)

{

PyObject *pObj = NULL;

int nThread = 0, nCalcData = -1, isDebug = 0, isCalcHis = 0;

if (!PyArg_ParseTuple(args, "Oiiii", &pObj, &nThread, &nCalcData, &isDebug, &isCalcHis))

{

PyErr_Print();

return NULL;

}

printf("%d%d%d%d\r\n", nThread, nCalcData, isDebug, isCalcHis);

return Py_True;

}

/*

PyMethodDef结构体有四个字段。

第一个是字符串,表示在Python文件中对应的方法的名称;

第二个是对应的C代码的函数名称;

第三个是一个标志位,表示该Python方法是否需要参数,METH_NOARGS表示不需要参数,METH_VARARGS表示需要参数;

第四个是一个字符串,它是该方法的__doc__属性,这个不是必须的,可以为NULL。

PyMethodDef结构体数组最后以{NULL,NULL,0,NULL}结尾。

*/

static PyMethodDef DJRJMethods[]=

{

{"Add_Formular", Py_Add_Formular, METH_VARARGS, "Add formular."},

{NULL, NULL, 0, NULL}

};

/*

这个函数是用于模块初始化的,即是在第一次使用import语句导入模块时会执行。

其函数名必须为initmodule_name这样的格式,在这里我们的模块名为DJRJ,所以函数名就是initDJRJ。

在这个函数中又调用了PyInitModule函数,它执行了模块的初始化操作。

Py_InitModule函数传入了两个参数,第一个参数为字符串,表示模块的名称;第二个参数是一个Py_MethodDef的结构体数组,表示该模块都具有哪些方法。

因此在 initDJRJ 方法之前还需要先定义 DJRJMethods 数组。

*/

PyMODINIT_FUNC initDJRJ(void)

{

Py_InitModule("DJRJ", DJRJMethods);

}

创建一个setup.py 文件,编译最主要的工作由setup()函数来完成:

from setuptools import setup,Extension

MOD = 'DJRJ'

setup(name=MOD, ext_modules=[Extension(MOD, sources=['DJRJ.cpp'])])

执行命令进行编译:

python setup.py build

如果报错,得先安装setuptools,步骤如下:

1.下载ez_setup.py到某一个目录(如: e:\tools\ez_setup.py)下载地址: https://bootstrap.pypa.io/ez_setup.py

2.cmd进入e:\tools,运行python ez_setup.py

setuptools安装完毕之后:

再执行 python setup.py build

也可以执行python setup.py install  直接安装到python库目录:

效果:

=

Demo程序:

百度云(13207134391):

CC++中调用Python\CExtenPythonModule

python安装c语言库_C语言扩展Python模块相关推荐

  1. 如何查看python安装了什么库-怎么看python安装了哪些库

    随着使用python的时间越来越长,安装的python模块也越来越多,时间久了都不记得自己之前到底对自己的电脑做过些什么了,于是乎就想要查看一下自己安装的python模块,现将查看方法总结如下 一.命 ...

  2. 【Python】Python安装指定版本库

    Python安装指定版本库 安装指定的版本库在平时代码开发中是很有必要的操作,毕竟有些库之间相互依赖,如果版本不在依赖的范围之内,我们安装的库会报安装的依赖版本有问题. 先看一下命令: pip ins ...

  3. 使用python Tqdm 进度条库让你的python进度可视化

    使用python Tqdm进度条库让你的python进度可视化 Tqdm在阿拉伯语表示进步,在西班牙语中表示我非常爱你.是一个快速,可扩展的Python进度条,可以在Python长循环中添加一个进度提 ...

  4. python安装在什么系统下最好-学python语言用什么软件比较好?需要安装哪些软件?...

    Python开发软件可根据其用途不同分为两种,一种是Python代码编辑器,一种是Python集成开发工具,两者的配合使用可以极大的提高Python开发人员的编程效率,以下是常用的几款Python代码 ...

  5. c语言是静态语言python语言是脚本语言吗_C语言还是Python语言哪个更好?

    最近,很多人问我问题. C语言还是Python,哪个更好?实际上,没有什么好坏之分,而且由于Python的基本逻辑是用C语言实现的,因此它们都有自己的特点.如果您想了解更多信息,建议您先学习C语言,然 ...

  6. aes加密算法python语言实现_C#, Java, PHP, Python和Javascript几种语言的AES加密解密实现[转载]...

    原文:http://outofmemory.cn/code-snippet/35524/AES-with-javascript-java-csharp-python-or-php c#里面的AES加密 ...

  7. 郑州大学python程序设计试题及答案_C 语言程序设计(2016 年秋季学期课程)

    C 语言的老师只会念 PPT?MOOC 课程只有视频,不如看书?感觉学懂了 C 语言,但设计不出程序?还在用谭老先生的书?感觉写法有点怪异?课堂上不敢问问题,怕自己被嘲笑?到计蒜客享受美国名校的教育方 ...

  8. 棱形旋转c语言程序_C 语言时隔 5 年重回巅峰,这 20 个热门项目拿去练手!

    在上个月的 TIOBE 编程语言排名中,C 语言和 Java 的差距只有 0.01%.在近日 TIOBE 公布的 2020 年 5 月编程语言排行榜中,C 语言成功超越了 Java,重返第一的王者宝座 ...

  9. python安装成功第三方库但import出问题_解析pip安装第三方库但PyCharm中却无法识别的问题及PyCharm安装第三方库的方法教程...

    一.问题具体描述: 在cmd控制台 pip install xxxx 后并显示安装成功后,并且尝试用cmd 的python 中import xxxx ,没有显示异常,说明这个库是安装成功了的.(这里以 ...

最新文章

  1. mysql数据库计划是什么_计划备份mysql数据库
  2. Effective C++: noexcept
  3. RealNVP与Glow:流模型的传承与升华
  4. centos7 greenplum6.1开源版本编译
  5. 批处理通过字符串截取得到文件名
  6. 中秋节,给大家送点货真价实的礼物
  7. liblfds 测试
  8. sql server 符号函数sign
  9. 分析了100万个搜索结果,验证了16个SEO优化的核心影响因素
  10. 普林斯顿微积分读本-[美]阿德里安·班纳著-修订版;杨爽, 赵晓婷, 高璞译
  11. 高德地图web精准定位
  12. Activity高级学习
  13. pycharmSDK is not defined for Run Configuration 解决
  14. 立足小餐饮,“新名酒”江小白能走多远?
  15. 惠普电脑u盘重装系统步骤_惠普笔记本u盘重装系统|惠普笔记本怎么用u盘重装系统...
  16. 亚马逊刷单测评的正确方法是什么样的?
  17. List、set、Map的底层实现原理
  18. 航天二院计算机硕士待遇怎么样,航天二院706所
  19. 老祖宗老话大全,值得收藏!
  20. 阿里巴巴2015校招电面

热门文章

  1. 快速搭建个人MQTT服务器(基于EMQX)
  2. 购房攻略—打折与返佣金套路
  3. html 网页自动适应大小,HTML+CSS入门 网页自适应解读
  4. WebJars统一管理静态资源
  5. 前端局部自动刷新_javascript如何实现局部刷新?
  6. Spark GraphX 中的 pregel函数(转载)
  7. query_posts()的参数使用方法
  8. uni-app 中实现位置授权以及打开地图选择位置功能
  9. Android简易仪表盘
  10. Tomcat日志如何使用cronolog实现日志分割