学了一段时间的python,对C++调用Python的程序也有了几分兴趣,在网上找寻方法的时候,也遇到了一些问题,这里就将自己试过并成功的方法加以说明。

        首先是对于环境的配置,这里我个人使用的是Windows系统加VS2008和Python2.7.5。当你正常安装了python后,在Windows系统下,会在System32文件夹下会多出一个.dll文件,由于本人使用的是python2.7.5,所以多出来的是python27.dll。但是这还不够,我们还需要一个python27_d.dll文件。这个文件在你的python安装目录下是不存在的,需要我们自行编译生成或者上网下载他人编译好的。

        这里先不说如何编译从而生成我们所需的文件,先将python安装目录下的include文件夹下的文件全部复制到VS2008安装目录下的VC的目录下的include文件夹内,如果按以上方式复制文件的话,在引用头文件时使用#include<python.h>便可,当然如果你想出于方便管理的角度来讲,也可以在VC的include文件下新建一个文件,譬如新建一个名为“python”的文件夹用来存放与python相关的头文件,这样在引用头文件时使用#include<python/python.h>也可。

        这里使用的是VS2008,所以复制到对应安装目录下的include便可;之后将python安装目录下的libs文件夹下文件复制到VC对应的lib文件夹下。

        现在我们来说一说如何编译生成python27_d.dll以及接下来还需要的重要文件python27_d.lib两个文件, 我们可以从python.org上下载python_2.7.5.tgz以获得python的源码包,解压后会有这样一个文件夹PCbuild。

PYTHON MFC联合编程 vc和python联合编程_Python

        打开里面的pcbuild.sln,我们会打开整个python的工程,打开工程的属性中注意以下两个红线处的设置。

PYTHON MFC联合编程 vc和python联合编程_脚本_02

PYTHON MFC联合编程 vc和python联合编程_VC_03

PYTHON MFC联合编程 vc和python联合编程_Python_04

        这里找到我们需要的文件,备份一下吧,以后会经常用到。这里是我编译生成的文件(点击链接下载),有需要可以下载。


def Hello():
    print "Hello,Python!"


#include<python/python.h>

int main()
{
	Py_Initialize();//--1--

	PyObject * pModule = NULL;//--2--
	PyObject * pFunc = NULL;
	PyObject * pArg = NULL;

	pModule = PyImport_ImportModule("demo");//--3--
	pFunc = PyObject_GetAttrString(pModule, "Hello");//--4--
	PyEval_CallObject(pFunc, NULL);//--5--

	Py_Finalize();//--6--

	system("pause");
	return 0;
}




        ⑤ :PyEval_CallObject()来执行你想使用的脚本文件中的函数,这里我们使用的Hello函数没有参数,所以使用NULL作为PyEval_CallObject()的参数便可,下一节会讲到带参数的python函数的引用。