在python中調(diào)用dll文件中的接口比較簡單,實(shí)例代碼如下:
如我們有一個(gè)test.dll文件,內(nèi)部定義如下:
extern"C"
{
int__stdcalltest(void*p,intlen)
{
returnlen;
}
}
在python中我們可以用以下兩種方式載入
1.
importctypes
dll=ctypes.windll.LoadLibrary('test.dll')
2.
importctypes
dll=ctypes.WinDll('test.dll')
其中ctypes.windll為ctypes.WinDll類的一個(gè)對象,已經(jīng)在ctypes模塊中定義好的。在test.dll中有test接口,可直接用dll調(diào)用即可
nRst=dll.test()
printnRst
由于在test這個(gè)接口中需要傳遞兩個(gè)參數(shù),一個(gè)是void類型的指針,它指向一個(gè)緩沖區(qū)。一個(gè)是該緩沖區(qū)的長度。因此我們要獲取到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__cdecltest(void*p,intlen)
{
returnlen;
}
}
由于接口中定義的是cdecl格式的調(diào)用,所以在python中也需要用相應(yīng)的類型
1.
importctypes
dll=ctypes.cdll.LoadLibrary('test.dll')
##注:一般在linux下為test.o文件,同樣可以使用如下的方法:
##dll=ctypes.cdll.LoadLibrary('test.o')
2.
importctypes
dll=ctypes.CDll('test.dll')
以上內(nèi)容為大家介紹了python調(diào)用dll,希望對大家有所幫助,如果想要了解更多Python相關(guān)知識,請關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。http://m.2667701.com/