• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Python在Windows和在Linux下调用动态链接库的教程

python 搞代码 4年前 (2022-01-09) 17次浏览 已收录 0个评论

Linux系统下调用动态库(.so)

1、linuxany.c代码如下:

  #include "stdio.h"  void display(char* msg){    printf("%s\n",msg);  }     int add(int a,int b){    return a+b;  }

2、编译c代码,最后生成Python可执行的.so文件
(1)gcc -c linuxany.c,将生成一个linuxany.o文件
(2)gcc -shared linuxany.c -o linuxany.so,将生成一个linuxany.so文件

3、在Python中调用

  #!/usr/bin/python     from ctypes import *  import os   //参数为生成的.so文件所在的绝对路径  libtest = cdll.LoadLibrary(os.getcwd() + '/linuxany.so')   //直接用方法名进行调用  print   libtest.display('Hello,I am linuxany.com')   print libtest.add(2,2010)

4、运行结果

Hello,I am linuxany.com2012 

Windows下Python调用dll

python中如果要调用dll,需要用到ctypes模块,在程序开头导入模块 import ctypes

由于调用约定的不同,python调用dll的方法也不同,主要有两种调用规则,即 cdecl和stdcal,还有其他的一些调用约定,关于他们的不同,可以查阅其他资料

先说 stdcal的调用方法:

方法一:

import ctypesdll = ctypes.windll.LoadLibrary( 'test.dll' )

方法二:

import ctypesdll = ctypes.WinDll( 'test.dll' )

cdecl的调用方法:

1.

import ctypesdll = ctypes.cdll.LoadLibrary( 'test.dll' )##注:一般在linux下为test.o文件,同样可以使用如下的方法:## dll = ctypes.cdll.LoadLibrary('test.o')

2.

import ctypesdll = ctypes.CDll( 'test.dll' )

看一个例子,首先编译一个dll

导出函数如下:

# define ADD_EXPORT Q_DECL_EXPORTextern "C" ADD_EXPORT int addnum(int num1,int num2){return num1+num2;}extern "C" ADD_EXPORT void get_path(char *path){memcpy(path,"hello",sizeof("hello"));}

这里使用的是cdecl

脚本如下:

dll=ct<i>本文来源gaodai$ma#com搞$$代**码网</i>ypes.CDLL("add.dll")add=dll.addnumadd.argtypes=[ctypes.c_int,ctypes.c_int] #参数类型add.restypes=ctypes.c_int            #返回值类型print add(1,2)get_path=dll.get_pathget_path.argtypes=[ctypes.c_char_p]path=create_string_buffer(100)get_path(path)print path.value

结果如下:

我们看到两个结果,第一个是进行计算,第二个是带回一个参数。

当然我们还可以很方便的使用windows的dll,提供了很多接口

GetSystemDirectory = windll.kernel32.GetSystemDirectoryAbuf = create_string_buffer(100)GetSystemDirectory(buf,100)print buf.valueMessageBox = windll.user32.MessageBoxWMessageBox(None, u"Hello World", u"Hi", 0)

运行结果如下:


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python在Windows和在Linux下调用动态链接库的教程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址