国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
當前位置: 首頁 - 科技 - 知識百科 - 正文

Python在Windows和在Linux下調用動態鏈接庫的教程

來源:懂視網 責編:小采 時間:2020-11-27 14:34:44
文檔

Python在Windows和在Linux下調用動態鏈接庫的教程

Python在Windows和在Linux下調用動態鏈接庫的教程: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文件 (
推薦度:
導讀Python在Windows和在Linux下調用動態鏈接庫的教程: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文件 (
Linux系統下調用動態庫(.so)

1、linuxany.c代碼如下:

 #include "stdio.h"
 void display(char* msg){
 printf("%s
",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.com
2012 


Windows下Python調用dll

python中如果要調用dll,需要用到ctypes模塊,在程序開頭導入模塊 import ctypes

由于調用約定的不同,python調用dll的方法也不同,主要有兩種調用規則,即 cdecl和stdcal,還有其他的一些調用約定,關于他們的不同,可以查閱其他資料

先說 stdcal的調用方法:

方法一:

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

方法二:

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


cdecl的調用方法:

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' )

看一個例子,首先編譯一個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"));
}

這里使用的是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

結果如下:

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)

運行結果如下:

2015818121806575.gif (144×160)

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Python在Windows和在Linux下調用動態鏈接庫的教程

Python在Windows和在Linux下調用動態鏈接庫的教程: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文件 (
推薦度:
標簽: linux 調用 python
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top 主站蜘蛛池模板: 一道本一区二区三区 | 欧美在线视频一区在线观看 | 欧美日本道免费二区三区 | 欧美一区二区日韩一区二区 | 欧美日韩精品一区二区三区视频在线 | 日韩不卡一区二区 | 中出在线播放 | 午夜国产 | 伊人精品国产 | 欧美a在线播放 | 中日韩欧美在线观看 | 国产美女视频黄a视频免费全过程 | 国产成人+综合亚洲+天堂 | 国产精品香蕉一区二区三区 | 欧美日本道免费一区二区三区 | 亚洲专区欧美专区 | 国产日韩欧美一区二区三区视频 | 国产拍拍拍免费视频网站 | 伊人久久91| 国产精品毛片va一区二区三区 | 日韩精品欧美一区二区三区 | 久久精品国产亚洲aa | 日本免费一级视频 | 亚洲 自拍 另类 欧美 综合 | 青青国产在线 | 国精品日韩欧美一区二区三区 | 福利视频一区二区三区 | 日韩欧美视频在线 | 国产中文在线 | 九九精品免视看国产成人 | 国产精品成人一区二区1 | 国产成人麻豆精品video | 欧美色乱| 欧美视频一区二区三区在线观看 | 国产欧美日韩综合精品一区二区 | 欧美成人h精品网站 | 国产精品美女流白浆视频 | 久久精品a一国产成人免费网站 | 国产成人精视频在线观看免费 | 欧美一区二区视频 | 国产精品久久香蕉免费播放 |