欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫的教程

 更新時(shí)間:2015年08月18日 12:16:26   作者:lrfgjj2  
這篇文章主要介紹了Python在Windows和在Linux下調(diào)用動(dòng)態(tài)鏈接庫的教程,在進(jìn)行Python的CS端編程時(shí)經(jīng)常需要用到,需要的朋友可以參考下

Linux系統(tǒng)下調(diào)用動(dòng)態(tài)庫(.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文件所在的絕對路徑
  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é)果如下:

2015818121733886.gif (368×95)

我們看到兩個(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é)果如下:

2015818121806575.gif (144×160)

相關(guān)文章

  • Python實(shí)現(xiàn)計(jì)算最小編輯距離

    Python實(shí)現(xiàn)計(jì)算最小編輯距離

    這篇文章主要介紹了Python實(shí)現(xiàn)計(jì)算最小編輯距離的相關(guān)代碼,有需要的小伙伴可以參考下
    2016-03-03
  • 解決Mac下使用python的坑

    解決Mac下使用python的坑

    今天小編就為大家分享一篇解決Mac下使用python的坑,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • PyCharm代碼回滾,恢復(fù)歷史版本的解決方法

    PyCharm代碼回滾,恢復(fù)歷史版本的解決方法

    今天小編就為大家分享一篇PyCharm代碼回滾,恢復(fù)歷史版本的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 使用Python爬取彈出窗口信息的實(shí)例

    使用Python爬取彈出窗口信息的實(shí)例

    這篇文章主要介紹了使用Python爬取彈出窗口信息的實(shí)例,具有很好的的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • Python3中最常用的5種線程鎖實(shí)例總結(jié)

    Python3中最常用的5種線程鎖實(shí)例總結(jié)

    python3線程中鎖機(jī)制還是很重要的知識(shí)點(diǎn),如果大家不清楚鎖機(jī)制的話,那就一定要好好看下這篇文章,這篇文章主要給大家總結(jié)介紹了光宇Python3中最常用的5種線程鎖,需要的朋友可以參考下
    2021-07-07
  • http請求 request失敗自動(dòng)重新嘗試代碼示例

    http請求 request失敗自動(dòng)重新嘗試代碼示例

    這篇文章主要介紹了http請求 request失敗自動(dòng)重新嘗試代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-01-01
  • Python中的布爾類型bool

    Python中的布爾類型bool

    這篇文章主要為大家介紹了Python中的布爾類型bool使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 利用 Python 實(shí)現(xiàn)多任務(wù)進(jìn)程

    利用 Python 實(shí)現(xiàn)多任務(wù)進(jìn)程

    這篇文章主要介紹如何利用 Python 實(shí)現(xiàn)多任務(wù)進(jìn)程,正在執(zhí)行的程序,由程序、數(shù)據(jù)和進(jìn)程控制塊組成,是正在執(zhí)行的程序,程序的一次執(zhí)行過程,是資源調(diào)度的基本單位。下面就來詳細(xì)介紹改內(nèi)容,需要的朋友可以參考一下
    2021-10-10
  • Python+Opencv實(shí)現(xiàn)圖像匹配功能(模板匹配)

    Python+Opencv實(shí)現(xiàn)圖像匹配功能(模板匹配)

    這篇文章主要為大家詳細(xì)介紹了Python+Opencv實(shí)現(xiàn)圖像匹配功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python學(xué)習(xí)之sys模塊使用教程詳解

    Python學(xué)習(xí)之sys模塊使用教程詳解

    sys模塊?與?os包一樣,也是對系統(tǒng)資源進(jìn)行調(diào)用。功能同樣也是非常豐富。本文將對sys模塊的一些簡單且常用的函數(shù)進(jìn)行介紹,感興趣的可以學(xué)習(xí)一下
    2022-03-03

最新評(píng)論