1.首先配置VS环境,我这里用的是VS2015,分别选择Release和X64下运行。
2.在VS中添加Python的库。
3.创建CPP文件,代码如下:
#include <Python.h>
#include <iostream>
static PyObject* HelloWorld(PyObject *self, PyObject *args)
{
std::cout << "Hello, world" << std::endl;
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef Methods[] = {
{ "HelloWorldFn", HelloWorld, METH_VARARGS, "chen" },
{ NULL, NULL }
};
static struct PyModuleDef HelloWorld_module =
{
PyModuleDef_HEAD_INIT,
"HelloWorld_module", /* name of module */
"", /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */
Methods
};
//初始化
PyMODINIT_FUNC PyInit_HelloWorld(void) {
return PyModule_Create(&HelloWorld_module);
}
注意:最后一个函数使用了导出函数PyInit_PrintHello,这个名字不是任意取的,是你的module名称添加前缀PyInit。该函数内部此使用的函数,由于Py_InitModule函数是python2.x中的函数,在python2.x中可以正常工作,但在python3.x中不再使用,因此此处在cpp中创建了一个PyModuleDef结构,然后将其引用传递给PyModule_Create。
4.需要将CPP文件生成pyd文件才能在python中调用,且pyd文件与dll文件类似,因此需修改VS中文件的配置类型,修改为动态库。
5.右键项目点击生成,生成成功后下面的控制台有如下显示:
6.打开该目录,将该目录下的dll文件后缀修改为python可调用的pyd文件。
7.将修改完后缀的pyd文件拷贝到python安装路径下的DLLS中。
8.此时就可以在pythonIDE中或者在开发工具下调用。下面是在cmd中调用。
下面是在Pycharm下进行调用。