wordpress相关书籍,百度快速排名优化工具,深圳电子商务网站建设,山东省住房和城乡建设厅服务网站大家好#xff01;我是编码小哥#xff0c;欢迎关注#xff0c;持续分享更多实用的编程经验和开发技巧#xff0c;共同进步。 查了一些资料#xff0c;不是报这个错#xff0c;就是报哪个错#xff0c;没有找到和我安装的环境的一致的案例#xff0c;于是将自己的摸索分… 大家好我是编码小哥欢迎关注持续分享更多实用的编程经验和开发技巧共同进步。 查了一些资料不是报这个错就是报哪个错没有找到和我安装的环境的一致的案例于是将自己的摸索分享出来。
一、环境准备
1、Visual Studio 2022下载地址:https://visualstudio.microsoft.com/zh-hans/downloads/ 图1
2、Python版本是3.11下载地址:https://www.python.org/downloads/ 图2
3、安装Visual Studio 2022和Python3.11
安装过程简单此处不再赘述我们的重点是看如何实现接口调用的。
二、配置Visual Studio 2022
安装好环境后使用Visual Studio 2022创建一个新项目我这里取名cpython。需要配置3个地方
1、右击项目名称--属性选择VC目录根据python安装路径配置包含目录和库目录。python安装路径怎么查看打开cmd输入python回车使用如下两个命令即可看到python路径。 import sys sys.path
将python安装路径下的include文件夹和libs文件夹复制到刚才新建的项目cpython目录下配置如图所示 图3
2、右击项目名称--属性选择C/C下的常规配置附加包含目录,加上项目中include的路径如图所示 图4
3、右击项目名称--属性选择链接器下的输入配置附加依赖项将项目中的libs目录中python311.lib复制一份改名为python311_d.lib附加依赖项的内容填写C:\Users\source\repos\cpython\libs\python311_d.lib;如图所示 图5
三、编写python代码和C代码
1. 首先创建一个名为test_python.py的Python文件内容如下
def add(a, b):return a b
2. 然后创建一个名为main.cpp的C文件内容如下
#include iostream
#include Python.hint main()
{/*初始化python*/Py_Initialize();/*初始化python系统文件路径否则加载不到要调用的test_python.py文件*/PyRun_SimpleString(import sys);PyRun_SimpleString(sys.path.append(./));/*加载要调用的python文件名称当前测试文件名称test_python.py*/PyObject* pName PyUnicode_DecodeFSDefault(test_python);PyObject* pModule PyImport_Import(pName);Py_XDECREF(pName);if (pModule ! NULL) {/*加载python模块中的函数*/PyObject* pFunc PyObject_GetAttrString(pModule, add);if (PyCallable_Check(pFunc)) {/*给pythonm模块中的函数add传递2个参数以元组的形式传递*/PyObject* pArgs PyTuple_New(2);/*给add函数传递第一个参数6*/PyTuple_SetItem(pArgs, 0, PyLong_FromLong(6));/*给add函数传递第二个参数10*/PyTuple_SetItem(pArgs, 1, PyLong_FromLong(10));/*C的python接口调用add函数返回计算结果*/PyObject* pValue PyObject_CallObject(pFunc, pArgs);Py_XDECREF(pArgs);if (pValue ! NULL) {/*打印计算结果*/std::cout \n std::endl;std::cout Result of call: PyLong_AsLong(pValue) std::endl;std::cout \n std::endl;Py_XDECREF(pValue);}else {PyErr_Print();}}else {if (PyErr_Occurred()) {PyErr_Print();}fprintf(stderr, Cannot find function \add\);}Py_XDECREF(pFunc);Py_XDECREF(pModule);}else {PyErr_Print();fprintf(stderr, Failed to load \%s\, test);return 1;}/*结束python初始化*/Py_Finalize();return 0;
}
test_python.py和main.cpp在同一目录如图所示 图6
3. 编译
1正在生成代码
1Previous IPDB not found, fall back to full compilation.
1All 16 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
1已完成代码的生成
1cpython.vcxproj - C:\Users\source\repos\cpython\x64\Release\cpython.exe “全部重新生成”: 1 成功0 失败0已跳过 占用时间 00:02.052
4. 点击菜单调试--开始执行不调试运行可以看到输出结果 图7