在VC6.0中调用python
2007-02-06 14:13
423 查看
在C++中调用python是python嵌入的一种重要的使用方式。
如果使用VC 6.0就会发现,只有直接运行一个pythorn命令串的方式能正常运行。
比如:
PyRun_SimpleString("import sys/nprint sys.path");
但是,如果是用更复杂的调用,即使是运行一个文件都不行。
Py_Initialize();
char szFile[] = "pyfile.py";
FILE* fp = fopen(szFile, "r");
if( fp == NULL) printf("failed to open file!");
else
{
if(PyRun_SimpleFile(fp, szFile) != 0)
{
fclose(fp);
printf("PyRun_SimpleFile(%s) failed!", szFile);
return -1;
}
fclose(fp);
}
Py_Finalize();
经过研究终于发现,原来是VC版本的问题。
由于python 2.4是在VC7.1下编译的。直接利用Python的windows安装包中.h、.lib会出现错误。
如果想在VC6中嵌入python需要自己重新编译python。如果希望使用python的debug版也需要自己编译。
编译的步骤,以python 2.4.4为例:
1) 下载python代码,windows安装包中没有。应该下载http://www.python.org/ftp/python/2.4.4/Python-2.4.4.tgz
2) 展开到一个目录%dist%
3) VC6的工程文件在%dist%/PC/VC6/pcbuild.dsw
4) 进行编译,如果没有其他需求,只编译pythoncore就可以。如果想完整编译python的全部模块,需要填加一些外部代码。具体说明可以参考相同工程目录下的readme.txt.
5) 所有的编译输出都在%dist%/PC/VC6/下。
这样就可以在VC的工程中使用了。
注意,头文件有两个目录%dist%/PC/和%dist%/Include/
如果使用VC 6.0就会发现,只有直接运行一个pythorn命令串的方式能正常运行。
比如:
PyRun_SimpleString("import sys/nprint sys.path");
但是,如果是用更复杂的调用,即使是运行一个文件都不行。
Py_Initialize();
char szFile[] = "pyfile.py";
FILE* fp = fopen(szFile, "r");
if( fp == NULL) printf("failed to open file!");
else
{
if(PyRun_SimpleFile(fp, szFile) != 0)
{
fclose(fp);
printf("PyRun_SimpleFile(%s) failed!", szFile);
return -1;
}
fclose(fp);
}
Py_Finalize();
经过研究终于发现,原来是VC版本的问题。
由于python 2.4是在VC7.1下编译的。直接利用Python的windows安装包中.h、.lib会出现错误。
如果想在VC6中嵌入python需要自己重新编译python。如果希望使用python的debug版也需要自己编译。
编译的步骤,以python 2.4.4为例:
1) 下载python代码,windows安装包中没有。应该下载http://www.python.org/ftp/python/2.4.4/Python-2.4.4.tgz
2) 展开到一个目录%dist%
3) VC6的工程文件在%dist%/PC/VC6/pcbuild.dsw
4) 进行编译,如果没有其他需求,只编译pythoncore就可以。如果想完整编译python的全部模块,需要填加一些外部代码。具体说明可以参考相同工程目录下的readme.txt.
5) 所有的编译输出都在%dist%/PC/VC6/下。
这样就可以在VC的工程中使用了。
注意,头文件有两个目录%dist%/PC/和%dist%/Include/
相关文章推荐
- Python调用MongoDB使用心得
- 【Python百知百问】2.Python函数的绑定调用和非绑定调用
- Python通过调用mysql存储过程实现更新数据功能示例
- Python记录详细调用堆栈日志的方法
- python调用c接口
- 4. python 子类调用父类方法
- [解析]多线程加锁Lock调用python2
- Python中调用父类的同名方法
- python学习笔记:子类怎样调用父类方法
- 二十种特征变换方法及Spark MLlib调用实例(Scala/Java/python)(一)
- matlabR2008a函数编译成dll供vc6.0调用的方法
- Python调用采用Boost Python封装的c++(2)
- c++ 调用 python
- python 调用webserver接口请求数据
- Java调用Python脚本工具类
- Python 中 一个模块文件导入操作:import 和 from ,以及reload调用
- Python Web 实现Ajax调用
- Python 函数的默认参数, 关键字参数的调用
- python调用Face++,玩坏了!
- python调用dll例子