首页 > 编程语言 >python怎么封装dll

python怎么封装dll

时间:2024-09-09 20:22:57浏览次数:3  
标签:Cython run 编译 python dll Python int 封装 DLL

Cython是结合了Python和C的语法的一种语言,可以简单的认为就是给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)

这其中的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文件。

标签:Cython,run,编译,python,dll,Python,int,封装,DLL
From: https://blog.csdn.net/hakesashou/article/details/142068254

相关文章

  • 用Python实现阿拉伯数字转换成中国汉字
    要将阿拉伯数字转换成中国汉字表示的数字,我们需要一个映射表来转换每个数字,并且处理不同位数的数字(如十、百、千、万等)。1.Python实现阿拉伯数字转换成中国汉字下面是一个完整的Python代码示例,用于实现这一功能。该代码首先定义了一个数字到汉字的映射表,然后定义了转换函数,该函......
  • python怎么逆序
    python中字符串数组如何逆序排列?下面给大家介绍几种方法:1、数组倒序:原始元素的倒序排列(1)切片>>> arr = [1,2,3,4,3,4]>>> print (arr[::-1])[4, 3, 4, 3, 2, 1](2)reverse()>>> arr = [1,2,3,4,3,4]>>> arr.reverse()>>> print (arr)[4, 3, 4, ......
  • python怎么输入中文
    解决中文输入的两种应用:在脚本中加语言编码声明“-*-coding:uft-8-*-”应用一:print中出现中文方法一:用unicode('',encoding='utf-8')或者unicode("",encoding="utf-8")。方法二:用u''或者u""。应用二:函数输入中出现中文,如raw_input()......
  • Win11系统提示找不到rdvgogl32.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个rdvgogl32.dll文件(挑选合适的版本文件)把它......
  • Win11系统提示找不到rdvgu1164.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个rdvgu1164.dll文件(挑选合适的版本文件)把它......
  • Win11系统提示找不到rdvvmtransport.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个rdvvmtransport.dll文件(挑选合适的版本文件......
  • Win11系统提示找不到ReactNativeXaml.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个ReactNativeXaml.dll文件(挑选合适的版本文......
  • 【最新华为OD机试E卷-支持在线评测】通过软盘拷贝文件(200分)多语言题解-(Python/C/Ja
    ......
  • python编程二维码里放视频
    动植物标本制作大赛  需要制作一个关于植物标本的二维码 存放采集植物的视频 笑了 pipinstallqrcode pipinstallopencv-python-ihttps://pypi.tuna.tsinghua.edu.cn/simple  新建文件贴入代码如下:importqrcodeimportcv2#视频链接video_url="h......
  • 【python篇】——python基础语法一篇就能明白,快速理解
    前言:本文章是在已经学习了C语言之后作者角度下进行书写的一篇关于python当中基础的语法说明。文章目录快速深入理解python当中的语法基本数据类型算数运算符类型的查看与转换变量的输入与输出条件语句比较运算符和逻辑运算符if、elif、else三目运算符循环语句while......