آموزش کار با DLL ها در Python

استفاده از dll ها در پایتون

در این پست به شما آموزش میدیم چطوراز فایل های dll در پایتون استفاده کنید.

ابتدا کتابخونه ctypes رو import کنید،  این کتابخونه شامل برخی متد ها، متغیر ها و توابع مرتبط با زبان c  هست و این کتابخونه میتونیم برای خوندن فایل های dll استفاده کنیم.

import ctypes

بعد از ایمپورت کردن کتابخونه ctypes میتونیم به تابع CDLL دسترسی پیدا کنیم و با استفاده از این تابع فایل dll رو بخونیم؛ بنده یک فایل dll به نام a.dll دارم که داخل این فایل یک تابع برای ضرب دو عدد وجود داره و به زبان c نوشته شده.       کد فایل dll :

{;int zarb( int i , int i2 ) { return i*i2

کار این dll یک ضرب ساده هست که به عنوان یک مثال ازش استفاده کردیم، شما از فایل های dll دیگه هم میتونید استفاده کنید.

برای خوندن یک فایل dll لازمه که آدرس یا نام اون فایل رو به عنوان ورودی برای تابع CDLL ارسال کنیم:

('d = ctypes.CDLL('a.dll

نام فایل بنده a.dll هست و اون رو برای CDLL میفرستم و کل عبارت رو درون متغیر d ذخیره میکنم.

مثال

دقت کنید نام تابعی که در فایل dll وجود داره zarb هست که دو تا عدد به عنوان ورودی میگیره و برای اینکه به این تابع دسترسی پیدا کنیم کافیه به صورت زیر عمل کنیم:

(d.zarb( 3 , 4

بنده عدد های ۳ و ۴ رو برای تابع zarb که درون فایل dll وجود داره ارسال میکنم، و طبق کد زیر نتیجه نهایی رو print میکنم.

((print( d.zarb(3,4

و حالا بعد از اجرای برنامه میتونم حاصل ضرب این دو عدد رو ببینیم:

البته ما دو تا عدد برای dll فرستادیم و کار راحتی بود، اما در زبان سی نوع ورودی ها مهم هستن و البته String در این زبان وجود نداره و ما نمیتونیم مستقیما یک String به عنوان ورودی اختصاص بدیم، برای اینکار لازمه که اون رو به پوینتر کاراکتری تبدیل کنیم (*char) و برای dll بفرستیم.

اگر عبارت _ctypes.c رو تایپ کنید یک لیست برای شما باز میشه که انواع داده رو نمایش میده و شما میتونید انتخاب کنید، و باید نوع داده ای خودتون رو به d.argtypes داخل یک لیست معرفی کنید.

اگر میخواید متن بفرستید، c_char_p رو انتخاب کنید.

[d.argtypes =  [ctypes.c_char_p

حالا کافیه متن خودتون رو به صورت زیر به بافر تبدیل کنید و اون روی در یک متغیر ذخیره کنید:

command =  ctypes.create_string_buffer(  'www.Pythons.ir'.encode('utf-8
(('

و بعد میتونید متغیر رو به عنوان ورودی برای dll بفرستید، برای مثال:

 ( d.zarb( command

البته مسلما این کد کار نمیکنه چون تابع zarb ما همچین ورودی نمیگیره، این فقط یک مثال بود

موفق باشید

منبع: Pythons.ir (مرجع پایتون ایران)

f

دیدگاه‌ خود را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *