在python中呼叫dll檔案中的介面比較簡單,例項**如下:
如我們有乙個test.dll檔案,內部定義如下:
extern "c"
int __stdcall test( void* p, int len)
return len;
在python中我們可以用以下兩種方式載入
1.import ctypes
dll = ctypes.windll.loadlibrary( 'test.dll' )
2.import ctypes
dll = ctypes.windll( 'test.dll' )
其中ctypes.windll為ctypes.windll類的乙個物件,已經在ctypes模組中定義好的。在test.dll中有test介面,可直接用dll呼叫即可
nrst = dll.test( )
print nrst
由於在test這個介面中需要傳遞兩個引數,乙個是void型別的指標,它指向乙個緩衝區。乙個是該緩衝區的長度。因此我們要獲取到python中的字串的指標和長度
#方法一:
sbuf = 'aaaaaaaaaabbbbbbbbbbbbbb'
pstr = ctypes.c_char_p( )
pstr.value = sbuf
pvoid = ctypes.cast( pstr, ctypes.c_void_p ).value
nrst = dll.test( pvoid, len( pstr.value) )
#方法二:
test = dll.test
test.argtypes = [ctypes.c_char_p, ctypes.c_int]
test.restypes = ctypes.c_int
nrst = test(sbuf, len(sbuf))
如果修改test.dll中介面的定義如下:
extern "c"
int __cdecl test( void* p, int len)
return len;
由於介面中定義的是cdecl格式的呼叫,所以在python中也需要用相應的型別
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' )
python使用 如何呼叫另外乙個python檔案
注 好記性不如爛筆頭,多記重複練習。首先匯入我們需要呼叫的檔案 from 檔名 import 類函式 from 檔名 import 在呼叫檔案的使用時需要把呼叫檔案以及現在使用的檔案同時放在同乙個目錄檔案下使用 呼叫分為三種 一種是呼叫某個函式,一種是呼叫整個檔案的,還有一種是在同乙個檔案中呼叫其他...
用SourceInsight閱讀Python工程
首先從http www.sourceinsight.com public languages python.clf 然後對sourceinsight作如下配置 1 選擇options preferences,單擊languages選項 2 單擊import按鈕,裝載並匯入python.clf 3 這...
socketserver實現併發(Python)
server類 處理鏈結 request類 處理通訊 基於tcp 服務端 import socketserver class myserver socketserver.baserequesthandler def handle self print self.request conn print ...