Python3调用C++:HellowWorld
Posted 肥宝Fable
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python3调用C++:HellowWorld相关的知识,希望对你有一定的参考价值。
百度搜过,没多少说这个的,来来去去就一连篇文章,而且是python2的。
搜到一个python3,复制下来,还得研究半天。
所以自己记录一下,免得忘记,毕竟不是专业写python的。
python:3.8
C++:Visual Studio 2019的C++
基本逻辑就是把C++部分的代码编译成dll。然后python当做一个库直接导入。
一开始觉得不方便。不能像Python那样直接执行。但其实再想想,运行C++程序,本来就要编译的,就没觉得什么了。
C++部分的代码:
#include <Python.h>
#include <iostream>
void Add()
std::cout << "~HelloWorld~" << std::endl;
/*
如果C函数没有返回值(返回 void 的函数),则必须返回None(可以用Py_RETUN_NONE宏来完成):
*/
static PyObject* WrappAdd(PyObject* self, PyObject* args)
Add();
Py_INCREF(Py_None);
return Py_None;
static PyMethodDef test_methods[] =
"Add", WrappAdd, METH_VARARGS, "something" ,
NULL, NULL , 0, NULL
;
static struct PyModuleDef PCmodule =
PyModuleDef_HEAD_INIT,
"PyCallCpp", /* name of module */
NULL, /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */
test_methods
;
PyMODINIT_FUNC
PyInit_PyCallCpp(void)
return PyModule_Create(&PCmodule);
上面这段代码,这个CPP文件放着就行了。原理并不是很清楚,毕竟我现在才写了HelloWorld而已。
不过要注意的是,PyCallCpp是我的工程名字。上面的模块定义也要写上对应的名字。有两个地方,看不明白的就搜一下替换好了。
上面引入了python的头文件。这个头文件在python的安装目录下,例如我的Python就安装在D盘下,那么具体路径就是D:\\Python\\Python38-32\\include
如果是正式项目组,可以把这个include目录复制出来放在自己想要的地方,然后提交到SVN或者GitHub就行了。
而无论是引入,还是生成dll,都是需要配置的。
这里要用Release的方式,没办法,找到别人的例子就是这样的下拉按钮,再点编辑,就会出现上面的弹框。
在对应的C++项目,点右键,属性,(这个截不了图)打开上图界面。选择C/C++,选择附加包含目录。点击文本框的
我是在当前工程下加了个include文件夹的,写了./include。如果写上安装目录下的include目录,填上D:\\Python\\Python38-32\\include就行了。
这个是用来包含一些路径,方便引入文件的时候,不需要写太多绝对路径或者相对路径。所以我加了./
这样就能编译成exe文件了,默认是这样,但是我们要的是dll文件。
如上图,改为生成dll的方式。也是选择的
还要改后缀名,当然也是可以通过配置实现的。
这个其实我也不知道是不是必须的哈哈
到这里算是生成dll了。但是要放到对应的地方,python的引入没C++那么方便,不知道是不是我自学的原因。
加了个copy /y "$(TargetPath)" "..\\ZergApp\\" ,把生成的文件复制到自己的Python的目录下就好了。
因为懒,所以我放到python项目的根目录了。
然后Python 部分怎么写?
import PyCallCpp as ca
ca.Add()
就这样,引入和使用就行了。之后如果有改动C++,生成一下就知道复制到对应目录了。
执行一下是能打印HelloWorld的了。
以上是关于Python3调用C++:HellowWorld的主要内容,如果未能解决你的问题,请参考以下文章
生命短暂,意识到开始使用python的重要性,python3.5.3安装和使用篇