• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell
您的位置:首页 > 脚本语言 >python > Python在Windows和在Linux下调用动态链接库的教程

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

作者: 字体:[增加 减小] 来源:互联网

通过本文主要向大家介绍了python 动态链接库,windows动态链接库,linux 动态链接库,动态链接库,动态链接库修复等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

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;
  }

</div>

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)

</div>

4、运行结果

Hello,I am linuxany.com
2012 
</div>


Windows下Python调用dll

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

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

先说 stdcal的调用方法:

方法一:

import ctypes
dll = ctypes.windll.LoadLibrary( 'test.dll' )
</div>

方法二:

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

</div>


cdecl的调用方法:

1.

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

2.

import ctypes
dll = ctypes.CDll( 'test.dll' )
</div>

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

导出函数如下:

# define ADD_EXPORT Q_DECL_EXPORT
extern "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"));
}

</div>

这里使用的是cdecl

脚本如下:

dll=ctypes.CDLL("add.dll")
add=dll.addnum
add.argtypes=[ctypes.c_int,ctypes.c_int] #参数类型
add.restypes=ctypes.c_int            #返回值类型
print add(1,2)


get_path=dll.get_path
get_path.argtypes=[ctypes.c_char_p]
path=create_string_buffer(100)
get_path(path)
print path.value

</div>

结果如下:

2015818121733886.gif (368×95)

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

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

GetSystemDirectory = windll.kernel32.GetSystemDirectoryA
buf = create_string_buffer(100)
GetSystemDirectory(buf,100)
print buf.value
MessageBox = windll.user32.MessageBoxW
MessageBox(None, u"Hello World", u"Hi", 0)

</div>

运行结果如下:

2015818121806575.gif (144×160)

</div>

您可能想查找下面的文章:

  • Python在Windows和在Linux下调用动态链接库的教程
  • Python 调用VC++的动态链接库(DLL)

相关文章

  • Python中的命令行参数解析工具之docopt详解
  • Python实现二维有序数组查找的方法
  • python批量修改文件名的实现代码
  • Python验证码识别处理实例
  • Python命名空间详解
  • Python的净值数据接口调用示例分享
  • Python使用multiprocessing创建进程的方法
  • Python多线程结合队列下载百度音乐的方法
  • 400多行Python代码实现了一个FTP服务器
  • Python中的列表生成式与生成器学习教程

文章分类

  • vbs
  • DOS/BAT
  • hta/htc
  • python
  • perl
  • VBA
  • ColdFusion
  • ruby
  • PowerShell
  • Lua
  • Golang
  • linux shell

最近更新的内容

    • Python备份Mysql脚本
    • 浅谈Python中chr、unichr、ord字符函数之间的对比
    • python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
    • Python深入学习之闭包
    • 详解详解Python中writelines()方法的使用
    • Python socket编程实例详解
    • python3中str(字符串)的使用教程
    • 使用Python中的线程进行网络编程的入门教程
    • 使用Python的PIL模块来进行图片对比
    • Python中用于检查英文字母大写的isupper()方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有