最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • python怎么封装dll

    正文概述    2020-05-04   341

    python怎么封装dll

    Cython是结合了Python和C的语法的一种语言,可以简单的认为就是给Python加上了静态类型后的语法。

    python学习网,大量的免费python视频教程,欢迎在线学习!

    安装Cython

    如果已经安装过Cython可以跳过此步。安装Cython需要使用easy_install,Python 2.7.9 以上的版本已经自带easy_install。在Visual Studio的命令提示符下完成(注意配合Python版本使用32位还是64位的Visual Studio的命令提示符,有可能需要以管理员权限运行):

    easy_install -U cython

    使用Cython编译

    在PyCharm中新建工程,然后新建一个py文件:great_module.py,在该文件中输入如下内容:

    def str_add(str1, str2):
      return int(str1) + int(str2)

    这是一个简单的将字符串转换为int求和的函数。为了使该函数能够被Cython编译,需要新建一个run.pyx文件,并加入如下内容:

    cdef public int str_add(const char* str1,const char* str2):
      return int(str1) + int(str2)

    相关推荐:《Python入门教程》

    这其中的cdef和public等都是cython关键字,这些关键字可以帮助函数可以被外部调用。然后在PyCharm中使用下面的命令编译,生成run.h和run.c两个文件。

    cython run.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(const char * a, const char * b)
      {
        return str_add(a, b);
      }
    }
    BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved) 
    {
      switch (fdwReason) 
      {
        case DLL_PROCESS_ATTACH:
          Py_Initialize();
          //dll初始化的时候调用,这是python3的写法,python2改成,initrun()。参见生成的run.h
          PyInit_run();
          break;
        case DLL_PROCESS_DETACH:
          Py_Finalize();
          break;
      }
      return TRUE;
    }

    右键项目,属性,进入VC++目录标签页。在包含路径中添加Python的include路径,如“C:\ProgramFiles\Python36\include”。在库目录中添加Python的lib,如“C:\Program Files\Python36\libs”。注意编译的版本选择Release,根据Python版本选择x64平台或x32平台。 编译后即可得到dll文件。


    下载网 » python怎么封装dll

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元