ব্যবহারের সহজলভ্যতার জন্য, সিটাইপগুলি হ'ল উপায়।
সিটিপসের নিম্নলিখিত উদাহরণটি আমি লিখেছি এমন আসল কোড থেকে (পাইথন 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
কাপড় (সমস্ত সি-টাইপ ধরনের তথ্য রয়েছে int
, char
, short
, void*
, ইত্যাদি) এবং মান বা রেফারেন্স দ্বারা পাস করতে পারেন। এটি নির্দিষ্ট ডেটা প্রকারগুলিও ফিরিয়ে দিতে পারে যদিও আমার উদাহরণটি এটি করে না (এইচএলএল এপিআই রেফারেন্স অনুসারে একটি ভেরিয়েবল সংশোধন করে মানগুলি প্রদান করে)।
উপরে উল্লিখিত সুনির্দিষ্ট উদাহরণের নিরিখে আইবিএম এর EHLLAPI মোটামুটি ধারাবাহিক ইন্টারফেস।
সমস্ত কলগুলি চারটি অকার্যকর পয়েন্টার পাস করে (EHLLAPI চতুর্থ প্যারামিটারের মাধ্যমে ফেরত কোডটি প্রেরণ করে, এটিতে একটি পয়েন্টার , আমি রিটার্নের ধরণ হিসাবে int
উল্লেখ int
করলে, আমি নিরাপদে এটিকে অগ্রাহ্য করতে পারি) এখানে আইবিএম এর ডকুমেন্টেশন অনুসারে । অন্য কথায়, ফাংশনের সি বৈকল্পিকটি হ'ল:
int hllApi (void *p1, void *p2, void *p3, void *p4)
এটি ctypes
EHLLAPI লাইব্রেরি সরবরাহ করে এমন কিছু করতে সক্ষম একটি সাধারণ, সাধারণ ক্রিয়াকলাপের জন্য তোলে , তবে সম্ভবত অন্যান্য গ্রন্থাগারগুলিতে ctypes
লাইব্রেরি ফাংশন অনুযায়ী পৃথক ফাংশন সেট আপ করা প্রয়োজন ।
এর থেকে প্রাপ্ত ফেরত মানটি WINFUNCTYPE
একটি ফাংশন প্রোটোটাইপ তবে আপনাকে আরও প্যারামিটার তথ্য সেট আপ করতে হবে (ধরণের উপরের এবং উপরে)। প্রতিটি টিপলটির hllApiParams
একটি প্যারামিটার "দিকনির্দেশ" (1 = ইনপুট, 2 = আউটপুট এবং এরকম), একটি প্যারামিটারের নাম এবং একটি ডিফল্ট মান রয়েছে - ctypes
বিশদ জন্য ডকো দেখুন
আপনার কাছে প্রোটোটাইপ এবং পরামিতি সম্পর্কিত তথ্য পরে, আপনি একটি পাইথনকে "কলযোগ্য" তৈরি করতে পারেন hllApi
যার সাহায্যে ফাংশনটি কল করতে পারেন। আপনি কেবল প্রয়োজন পরিবর্তনশীল (তৈরি p1
মাধ্যমে p4
আমার ক্ষেত্রে) এবং তাদের সঙ্গে ফাংশন কল।