Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫(kù)的教程
Linux系統(tǒng)下調(diào)用動(dòng)態(tài)庫(kù)(.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可執(zhí)行的.so文件
(1)gcc -c linuxany.c,將生成一個(gè)linuxany.o文件
(2)gcc -shared linuxany.c -o linuxany.so,將生成一個(gè)linuxany.so文件
3、在Python中調(diào)用
#!/usr/bin/python
from ctypes import *
import os
//參數(shù)為生成的.so文件所在的絕對(duì)路徑
libtest = cdll.LoadLibrary(os.getcwd() + '/linuxany.so')
//直接用方法名進(jìn)行調(diào)用
print
libtest.display('Hello,I am linuxany.com')
print libtest.add(2,2010)
4、運(yùn)行結(jié)果
Hello,I am linuxany.com 2012
Windows下Python調(diào)用dll
python中如果要調(diào)用dll,需要用到ctypes模塊,在程序開頭導(dǎo)入模塊 import ctypes
由于調(diào)用約定的不同,python調(diào)用dll的方法也不同,主要有兩種調(diào)用規(guī)則,即 cdecl和stdcal,還有其他的一些調(diào)用約定,關(guān)于他們的不同,可以查閱其他資料
先說 stdcal的調(diào)用方法:
方法一:
import ctypes dll = ctypes.windll.LoadLibrary( 'test.dll' )
方法二:
import ctypes dll = ctypes.WinDll( 'test.dll' )
cdecl的調(diào)用方法:
1.
import ctypes
dll = ctypes.cdll.LoadLibrary( 'test.dll' )
##注:一般在linux下為test.o文件,同樣可以使用如下的方法:
## dll = ctypes.cdll.LoadLibrary('test.o')
2.
import ctypes dll = ctypes.CDll( 'test.dll' )
看一個(gè)例子,首先編譯一個(gè)dll
導(dǎo)出函數(shù)如下:
# 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"));
}
這里使用的是cdecl
腳本如下:
dll=ctypes.CDLL("add.dll")
add=dll.addnum
add.argtypes=[ctypes.c_int,ctypes.c_int] #參數(shù)類型
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
結(jié)果如下:

我們看到兩個(gè)結(jié)果,第一個(gè)是進(jìn)行計(jì)算,第二個(gè)是帶回一個(gè)參數(shù)。
當(dāng)然我們還可以很方便的使用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)
運(yùn)行結(jié)果如下:

- 用python實(shí)現(xiàn)一個(gè)簡(jiǎn)單的驗(yàn)證碼
- Python利用Pillow(PIL)庫(kù)實(shí)現(xiàn)驗(yàn)證碼圖片的全過程
- python圖片驗(yàn)證碼識(shí)別最新模塊muggle_ocr的示例代碼
- Python實(shí)現(xiàn)驗(yàn)證碼識(shí)別
- 使用python創(chuàng)建生成動(dòng)態(tài)鏈接庫(kù)dll的方法
- python調(diào)用動(dòng)態(tài)鏈接庫(kù)的基本過程詳解
- ubuntu中python調(diào)用C/C++方法之動(dòng)態(tài)鏈接庫(kù)詳解
- Python調(diào)用易語言動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn)驗(yàn)證碼功能
相關(guān)文章
對(duì)python中if語句的真假判斷實(shí)例詳解
今天小編就為大家分享一篇對(duì)python中if語句的真假判斷實(shí)例詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
Python如何實(shí)現(xiàn)PDF隱私信息檢測(cè)
隨著越來越多的個(gè)人信息以電子形式存儲(chǔ)和傳輸,確保這些信息的安全至關(guān)重要,本文將介紹如何使用Python檢測(cè)PDF文件中的隱私信息,需要的可以參考下2025-02-02
Python實(shí)現(xiàn)電腦壁紙的采集與輪換效果
這篇文章主要為大家介紹了如何利用Python實(shí)現(xiàn)電腦壁紙的采集以及輪換效果,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Python有一定幫助,需要的可以參考一下2022-04-04
Python利用pywin32實(shí)現(xiàn)自動(dòng)操作電腦
在windows系統(tǒng)上,重復(fù)性的操作可以用Python腳本來完成,其中常用的模塊是win32gui、win32con、win32api,要使用這三個(gè)模塊需要先安裝pywin32。本文就為大家介紹了如何利用這些模塊實(shí)現(xiàn)自動(dòng)操作電腦,感興趣的可以了解一下2022-11-11
torch.utils.data.DataLoader與迭代器轉(zhuǎn)換操作
這篇文章主要介紹了torch.utils.data.DataLoader與迭代器轉(zhuǎn)換操作,文章內(nèi)容接受非常詳細(xì),對(duì)正在學(xué)習(xí)或工作的你有一定的幫助,需要的朋友可以參考一下2022-02-02
R語言屬性知識(shí)點(diǎn)總結(jié)及實(shí)例
在本篇文章里小編給大家整理了一篇關(guān)于R語言屬性知識(shí)點(diǎn)總結(jié)及實(shí)例內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2021-03-03
python數(shù)據(jù)分析之DateFrame數(shù)據(jù)排序和排名方式
這篇文章主要介紹了python數(shù)據(jù)分析之DateFrame數(shù)據(jù)排序和排名方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-05-05

