1.在VS2008中:
1)配置头文件路径 C:\Python27\include
2)配置依赖项路径:C:\Python27\libs
3)配置依赖性:python27_d.lib(注:此处用debug,所以要把C:Python25libs下的python25.lib改成python25_d.lib)
4)注:右击项目->属性,配置属性->C/C++->预编译头,将“创建/使用预编译头”选项设为“不使用预编译头”
2.工程属性说明一下。
1)创建项目是win32 项目,项目类型是dll,创建后讲项目属性的linker(链接器)中的outputfile(输出文件)的后缀dll改成pyd,不改也可以,在编译生成dll文件之后手动将后缀改为pyd。
2)python扩展需要的头文件和链接的文件都在安装的python目录下,一般是C:\PythonXX\include和C:\PythonXX\libs这2个文件夹(XX为你安装的版本)这里需要注意的是python旧的版本都是不提供python_d.lib这个文件,所以如果将项目设置为debug的同学就需要自己去下载这个文件,不然会报错,或者直接将项目设置为release来解决这个问题。
3.环境已经搭好,剩下就是写代码,写python扩展就简洁的3个步骤。
1. 第一步写好要扩展的函数,注意python与C++之间的类型转换。
2. 第二步写好模块方法和初始化函数。
4.具体案例如下:
建立一个“动态链接库”dll工程,代码如下:
#include<Python.h> //python.h是包含python一些定义的头文件,在python的include目录下
#include <windows.h>
#pragma comment(lib,"python27.lib")
static PyObject *mb_showMsg(PyObject *self,PyObject *args);
//必须extern "C"下,这样不会在C++编译器里不会更改掉导出的函数名字,我第一次就犯了这样的错误
5.将上面这段混杂着大量注释的代码拷贝到你的编辑器里,然后在solution configuration选用release,将编译生成mb.dll,修改后缀成mb.pyd,然后拷贝到python的DLLs目录下,打开idle(python的交互程序),写入代码:
import mb
mb.showMsg("afafadsf")
可以看到弹出来一个MessageBox。