उपयोग में आसानी के लिए, 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)
यह ctypesEHLLAPI लाइब्रेरी प्रदान करने के लिए कुछ भी करने में सक्षम एक एकल, सरल फ़ंक्शन के लिए बनाता है , लेकिन यह संभावना है कि अन्य पुस्तकालयों को ctypesप्रति लाइब्रेरी फ़ंक्शन की स्थापना के लिए एक अलग फ़ंक्शन की आवश्यकता होगी ।
से वापसी मान WINFUNCTYPEएक फ़ंक्शन प्रोटोटाइप है, लेकिन आपको अभी भी अधिक पैरामीटर जानकारी (प्रकारों के ऊपर और ऊपर) सेट करना होगा। प्रत्येक टपल में hllApiParamsएक पैरामीटर "दिशा" (1 = इनपुट, 2 = आउटपुट और इतने पर), एक पैरामीटर नाम और एक डिफ़ॉल्ट मान है - ctypesविवरण के लिए डोको देखें
एक बार जब आपके पास प्रोटोटाइप और पैरामीटर जानकारी होती है, तो आप पायथन " hllApiकॉल करने योग्य" बना सकते हैं जिसके साथ फ़ंक्शन को कॉल करना है। आप बस जरूरत चर (बनाने p1के माध्यम से p4मेरे मामले में) और उनके साथ समारोह कहते हैं।