使用Visual Studio 2008开发Python的C++扩展之准备步骤
- 在Visual Studio 2008的菜单 工具->选项,项目与解决方案->VC++目录,右边选择“包含文件”,添加Python安装路径里面的include目录;选择“库文件”,添加Python安装路径里面的libs目录
- 新建项目,项目类型选择C++的MFC DLL。注意项目名要全小写(其实只要最后生成的dll是全小写就可以了,这里为了方便起见)。这里举例项目名为"pytest"
- 删除除了"pytest.{cpp, h}"以外的所有.h 和.cpp
- 打开"pytest.h",删除所有东西。输入"include <Python.h>"
- 打开"pytest.cpp",删除所有东西除了include <pytest.h>这句
- 右击项目->属性,配置属性->C/C++->预编译头,将“创建/使用预编译头”选项设为“不使用预编译头”
- 继续在项目属性窗口,配置属性->链接器->输入,将“模块定义文件”的值删除;配置属性->链接器->常规,把“输出文件”的值中的"dll"替换为"pyd"
在pytest.cpp中插入以下代码模板:
代码
static PyObject*
invoke(PyObject *self, PyObject *args)
{
char* cmdName, *dllName;
PyObject *paraList;
//example
if(!PyArg_ParseTuple(args, "ssO", &dllName, &cmdName,¶List)) //ParseTuple will raise error when parse fails
return NULL;
else
{
}
}
static PyMethodDef pytest_methods[] = {
{"invoke", invoke, METH_VARARGS, "Invoke the function in DLL"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC initpytest()
{
Py_InitModule("pytest", pytest_methods);
}
invoke(PyObject *self, PyObject *args)
{
char* cmdName, *dllName;
PyObject *paraList;
//example
if(!PyArg_ParseTuple(args, "ssO", &dllName, &cmdName,¶List)) //ParseTuple will raise error when parse fails
return NULL;
else
{
}
}
static PyMethodDef pytest_methods[] = {
{"invoke", invoke, METH_VARARGS, "Invoke the function in DLL"},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC initpytest()
{
Py_InitModule("pytest", pytest_methods);
}