C++调用python:无参数,简单helloworld示例
2015-10-26 01:27
405 查看
运行环境:VS2015 + python3.4
总体步骤简单来说如下:
设置编译环境,其实就是设置Python的头文件和库文件目录以及一个很让人头疼的python3.4_d.lib问题
初始化Python解释器: Py_Initialize();
调用Python
释放资源 Py_Finalize();
点开程序属性设置如下几个地方,对应的分别是
python头文件目录:
python库文件目录:
python34_d.lib:
这一步python26_d.lib的生成参考的是文末参考链接2,但是我在尝试的过程中一直出错,还未找到原因,下次补充。因此我采取了下下策暂时应对。首先我们看下如果没有这个文件的报错结果:
要知道这里为什么会有python34.lib和python34_d.lib的差别就是因为
python_d.lib是 库的调试后形式,当我们以debug模式编译工程时,python就用这个lib文件,但是这个文件是不可用 的。对于这点,最快的办法就是强制要求python在任何情况下都是用非调试版本,就可以了。
根据参考链接3中对python头文件pyconfig.h进行了修改:
将DEBUG条件下的lib由python34_d.lib改为python34.lib.
所以这是下下策了,等我找到编译生成python34_d.dll和python34_d.dll出错的原因后再来补充。当然如果怕麻烦,之间用release版本就可以了,不用生成python34_d.lib。
还有一点就是我的python是64位的,因此还设置了VS的编译平台为X64。
如果没有设置,默认情况下是32位的,而我的python是64位的,会报如下错误:
都配置正确后下面是实现的代码,比较简单,就不详细说了:
python代码:
C++代码:
把前面写好的helloworld.py文件放在.cpp和.h所在的文件夹下,然后编译运行。
执行结果:
本文只是简单的hello world示例,没有参数的传输过程,比较简单,后面有时间了再补充有参数的情况以及使用诸如SWIG等工具进行python和C/C++相互扩展的方法。
Ref:
http://blog.csdn.net/c_cyoxi/article/details/23978007
http://blog.csdn.net/c_cyoxi/article/details/23969203
http://www.cppblog.com/API/archive/2013/04/25/199720.aspx
From:
http://blog.csdn.net/sherrylml/article/details/49405257
总体步骤简单来说如下:
设置编译环境,其实就是设置Python的头文件和库文件目录以及一个很让人头疼的python3.4_d.lib问题
初始化Python解释器: Py_Initialize();
调用Python
释放资源 Py_Finalize();
设置编译环境
首先新建一个控制台程序点开程序属性设置如下几个地方,对应的分别是
python头文件目录:
python库文件目录:
python34_d.lib:
这一步python26_d.lib的生成参考的是文末参考链接2,但是我在尝试的过程中一直出错,还未找到原因,下次补充。因此我采取了下下策暂时应对。首先我们看下如果没有这个文件的报错结果:
要知道这里为什么会有python34.lib和python34_d.lib的差别就是因为
python_d.lib是 库的调试后形式,当我们以debug模式编译工程时,python就用这个lib文件,但是这个文件是不可用 的。对于这点,最快的办法就是强制要求python在任何情况下都是用非调试版本,就可以了。
根据参考链接3中对python头文件pyconfig.h进行了修改:
# if defined(_DEBUG) # pragma comment(lib,"python34_d.lib") # elif defined(Py_LIMITED_API) # pragma comment(lib,"python3.lib") # else # pragma comment(lib,"python34.lib") # endif /* _DEBUG */
将DEBUG条件下的lib由python34_d.lib改为python34.lib.
# if defined(_DEBUG) # pragma comment(lib,"python34.lib")
所以这是下下策了,等我找到编译生成python34_d.dll和python34_d.dll出错的原因后再来补充。当然如果怕麻烦,之间用release版本就可以了,不用生成python34_d.lib。
还有一点就是我的python是64位的,因此还设置了VS的编译平台为X64。
如果没有设置,默认情况下是32位的,而我的python是64位的,会报如下错误:
都配置正确后下面是实现的代码,比较简单,就不详细说了:
python代码:
#helloworld.py #Sherry #2015/10/25 def HelloWorld(): print("hello, world!")
C++代码:
#include "stdafx.h" #include <Python.h> int main() { Py_Initialize();//使用python之前,要调用Py_Initialize();这个函数进行初始化 PyObject * pModule = NULL;//声明变量 PyObject * pFunc = NULL;// 声明变量 PyObject * pArg = NULL; pModule = PyImport_ImportModule("helloworld");//这里是要调用的文件名 pFunc = PyObject_GetAttrString(pModule, "HelloWorld");//这里是要调用的函数名 PyEval_CallObject(pFunc, NULL);//调用函数 Py_Finalize();//调用Py_Finalize,这个根Py_Initialize相对应的。 system("pause"); return 0; }
把前面写好的helloworld.py文件放在.cpp和.h所在的文件夹下,然后编译运行。
执行结果:
本文只是简单的hello world示例,没有参数的传输过程,比较简单,后面有时间了再补充有参数的情况以及使用诸如SWIG等工具进行python和C/C++相互扩展的方法。
Ref:
http://blog.csdn.net/c_cyoxi/article/details/23978007
http://blog.csdn.net/c_cyoxi/article/details/23969203
http://www.cppblog.com/API/archive/2013/04/25/199720.aspx
From:
http://blog.csdn.net/sherrylml/article/details/49405257
相关文章推荐
- C语言for循环之等边倒三角的打印
- 指针学习笔记(2)——基本操作
- 简单登陆系统 1.0
- 快速排序和归并排序(C语言)
- leetcode笔记:Anagrams
- a+aa+aaa+aaaa+aaaaa 1.0
- effective c++在资源管理类中提供对原始资源的访问
- caffe 练习3 用caffe提供的C++函数批量抽取图像特征------by 香蕉麦乐迪
- c语言之指针介绍
- C语言:字符串的常用函数 !
- 带你玩转Visual Studio——带你理解多字节编码与Unicode码
- C语言笔记(二维数组与数值指针)
- 在C语言的库函数中就有快速排序的库函数,即为qsort
- 日志库EasyLogging++学习系列(2)—— 日志级别
- c语言学习收获
- 通用线程池的设计和实现[C语言]
- C++中的const
- 水仙花数
- C语言三种循环用法和区别
- ——黑马程序员——C语言基础--printf函数和scanf函数