python怎么封装dll
Cython是一种结合Python和C语法的语言,可以简单地认为是在Python中添加静态语法。
python学习网,大量免费python视频教程,欢迎在线学习!
安装Cython
如果已经安装了Cython,可以跳过这一步。安装Cython需要easy_install,Python 2.7.9 上述版本已自带easy_install。Visual Studio的命令提示符下完成(注意用32或64Visual与Python版本合作) Studio的命令提示符可能需要由管理员操作):
easy_install-Ucython
Cython用Cython编译
在PyCharm中新建项目,然后新建Py文件:great_module.py,将以下内容输入本文件:
defstr_add(str1,str2): returnint(str1)+int(str2)
这是一个将字符串转换为int求和的简单函数。为了使函数被Cython编译,需要创建一个新的run.pyx文件,并添加以下内容:
cdefpublicintstr_add(constchar*str1,constchar*str2): returnint(str1)+int(str2)
相关推荐:Python入门教程
cdef和public都是cython关键字,可以帮助函数被外部调用。然后在pycharm中使用以下命令编译生成run.h和run.c两个文件。
cythonrun.pxy
Cython支持Python的动态类型特性。如果用VS命令行编译后续步骤,也可以生成DLL,但实验时不知道为什么不能提取DLL中的函数地址,所以这里统一使用静态类型,所有参数和返回值都用Cython的静态类型关键词来规定数据类型。
动态链接库通过VS编译获得
在得到了.c和.在h文件之后,我们需要为它创建VS DLL工程。打开VS软件,新建win32项目,其中DLL选择应用类型,空项选择附加选项。 将刚刚的.c和.h文件复制到项目存储代码的文件夹中,并添加到项目中。在项目中添加一个空的dllmain.cpp,并添加以下代码:
#include<Python.h> #include<Windows.h> #include"run.h" extern"C" { __declspec(dllexport)int__stdcall_str_add(constchar*a,constchar*b) { returnstr_add(a,b); } } BOOLWINAPIDllMain(HINSTANCEhinstDLL,DWORDfdwReason,LPVOIDlpReserved) { switch(fdwReason) { caseDLL_PROCESS_ATTACH: Py_Initialize(); ///dll初始化时调用,这是python3的写法,python2改为,initrun()。参见生成的run.h PyInit_run(); break; caseDLL_PROCESS_DETACH: Py_Finalize(); break; } returnTRUE; }
右键项目,属性,进入VC++目录标签页。在包含路径的include路径中添加Python,例如“C:\ProgramFilesPython36include"。将Pythonlib添加到库目录中,如“C:\Program FilesPython36libs".注意Release的编译版本,X64平台或X32平台根据Python版本选择。 dll文件可以在编译后获得。