2011-12-22 52 views
1

我有一個關於使用DLL文件的問題。我使用的代碼如下。它在DLL的手冊中寫着函數的簽名。我正在使用Python 2.7在Python 2.7中使用DLL與ctypes

from ctypes import * 
mtrs= windll.LoadLibrary("mtrs.dll") 
mtrs.sw_Open("SystemWorks", 0, c_ulong(0x100 | 0x10000), None, None) 
0 

在DLL的手冊中它寫了函數的簽名。

DLLINOUT BOOL WINAPI sw_Open(LPCSTR DeviceName, ULONG DeviceNumber, ULONG OpenFlags, void * Arg1, void * Arg2); 

如果設備未打開,則函數返回false。

參數中是否有錯誤?

回答

0

如果您使用的是Python 3x,則應該使用b"SystemWorks",因爲第一個參數的類型爲LPCSTR

+0

我使用python 2.7 – 2011-12-29 13:34:38

0
#!/usr/bin/env python3 
from ctypes import * 
mtrs= windll.LoadLibrary("mtrs.dll") 
mtrs.sw_Open.argtypes = [c_char_p, c_ulong, c_ulong, c_void_p, c_void_p] 
mtrs.sw_Open.restype = c_bool 
mtrs.sw_Open(b"SystemWorks", c_ulong(0), c_ulong(0x100 | 0x10000), None, None) 
+0

爲什麼'c_ulong(0)'而不僅僅是'0'? – Abyx 2011-12-22 14:36:04

+0

@Abyx。如果不是,則發生「隱式轉換」。 – kev 2011-12-22 14:47:41

+0

那麼爲什麼你使用'c_ulong'的顯式創建? – Abyx 2011-12-22 14:51:36