首先贴出示例代码,也只是给自己的学习做个笔记而已。看代码比注释舒服多了。
#include <Python.h>
#include <string.h>
#include <windows.h>
static PyObject *message(PyObject *self, PyObject *args) {
char *fromPython, result[64];
if (!PyArg_Parse(args, "(s)", &fromPython))
return NULL;
else {
strcpy(result, "Hello, ");
strcat(result, fromPython);
return Py_BuildValue("s", result);
}
}
static struct PyMethodDef WindowsCapture_methods[] = {
{"message", message, METH_VARARGS, "test"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC initWindowsCapture() {
(void)Py_InitModule("WindowsCapture", WindowsCapture_methods);
}
首先,这段代码在vs2008下面是编译通过的,也能在python中正常调用,不过编译前首先得对工程属性说明一下。
(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来解决这个问题。
做完以上2步你的项目环境是搭好了,剩下就是写代码了。这里就不详细描述扩展程序中的各种注意事项和各种用法,只讲述下写python扩展就简洁的3个步骤。
1. 第一步写好要扩展的函数,注意python与C++之间的类型转换。
2. 第二步写好模块方法和初始化函数。
写扩展就是这么简单,至于中间遇到的问题,还有在各种环境下写扩展的一些不同的地方,这里就不详细描述了。