उपयोग में आसानी के लिए, ctypes जाने का रास्ता है।
Ctypes का निम्नलिखित उदाहरण मेरे द्वारा लिखे गए वास्तविक कोड से है (पायथन 2.5 में)। यह अब तक, सबसे आसान तरीका है जो मैंने आपसे पूछा है।
import ctypes
# Load DLL into memory.
hllDll = ctypes.WinDLL ("c:\\PComm\\ehlapi32.dll")
# Set up prototype and parameters for the desired function call.
# HLLAPI
hllApiProto = ctypes.WINFUNCTYPE (
ctypes.c_int, # Return type.
ctypes.c_void_p, # Parameters 1 ...
ctypes.c_void_p,
ctypes.c_void_p,
ctypes.c_void_p) # ... thru 4.
hllApiParams = (1, "p1", 0), (1, "p2", 0), (1, "p3",0), (1, "p4",0),
# Actually map the call ("HLLAPI(...)") to a Python name.
hllApi = hllApiProto (("HLLAPI", hllDll), hllApiParams)
# This is how you can actually call the DLL function.
# Set up the variables and call the Python name with them.
p1 = ctypes.c_int (1)
p2 = ctypes.c_char_p (sessionVar)
p3 = ctypes.c_int (1)
p4 = ctypes.c_int (0)
hllApi (ctypes.byref (p1), p2, ctypes.byref (p3), ctypes.byref (p4))
ctypes
सामान (सभी C- प्रकार डेटा प्रकार है int
, char
, short
, void*
, और इतने पर) और मूल्य या संदर्भ द्वारा पारित कर सकते हैं। यह विशिष्ट डेटा प्रकार भी लौटा सकता है, हालांकि मेरा उदाहरण ऐसा नहीं करता (संदर्भ द्वारा पारित चर को संशोधित करके HLL API मान लौटाता है)।
ऊपर दिखाए गए विशिष्ट उदाहरण के संदर्भ में, IBM का EHLLAPI एक काफी सुसंगत इंटरफ़ेस है।
सभी कॉल चार शून्य संकेत पारित (EHLLAPI एक चौथे पैरामीटर के माध्यम से वापसी कोड वापस, एक सूचक भेजता है int
तो, जब तक मैं निर्दिष्ट int
वापसी प्रकार के रूप में, मैं उसे अनदेखा कर सकते) आईबीएम के प्रलेखन के अनुसार यहाँ । दूसरे शब्दों में, फंक्शन का C वेरिएंट होगा:
int hllApi (void *p1, void *p2, void *p3, void *p4)
यह ctypes
EHLLAPI लाइब्रेरी प्रदान करने के लिए कुछ भी करने में सक्षम एक एकल, सरल फ़ंक्शन के लिए बनाता है , लेकिन यह संभावना है कि अन्य पुस्तकालयों को ctypes
प्रति लाइब्रेरी फ़ंक्शन की स्थापना के लिए एक अलग फ़ंक्शन की आवश्यकता होगी ।
से वापसी मान WINFUNCTYPE
एक फ़ंक्शन प्रोटोटाइप है, लेकिन आपको अभी भी अधिक पैरामीटर जानकारी (प्रकारों के ऊपर और ऊपर) सेट करना होगा। प्रत्येक टपल में hllApiParams
एक पैरामीटर "दिशा" (1 = इनपुट, 2 = आउटपुट और इतने पर), एक पैरामीटर नाम और एक डिफ़ॉल्ट मान है - ctypes
विवरण के लिए डोको देखें
एक बार जब आपके पास प्रोटोटाइप और पैरामीटर जानकारी होती है, तो आप पायथन " hllApi
कॉल करने योग्य" बना सकते हैं जिसके साथ फ़ंक्शन को कॉल करना है। आप बस जरूरत चर (बनाने p1
के माध्यम से p4
मेरे मामले में) और उनके साथ समारोह कहते हैं।