جمعه, 18 خرداد 1403

 



موضوع: کاربرد API ها

کاربرد API ها 9 سال 5 ماه ago #110803

قلب ويندوز يعني چيزي كه اساس سيستم عامل ويندوز است، چيزي نيست بجز توابع API .
API مخفف كلمه Aplication programming interface ميباشد كه به معناي رابط
برنامه سازي كاربردي است .
كه از آن به نام هاي Aplication programming Interface و Application Programmers Interface نيز ياد شده است .
نام API به توابعي اطلاق ميشود كه در فايل هاي مختلف ويندوز مانند advapi23.DLL و
userDLL23.DLL و ole23.DLL و ... وجود دارند .
هر كاري كه در ويندوز روي مي دهد و هر اتفاقي كه مي افتد با استفاده از اين توابع صورت مي
گيرد .
در حقيقت نوشتن برنامه براي ويندوز از صدا كردن توابع API تشكيل مي شود . API بخشي از خود ويندوز است. لذا تمام برنامهاي كاربردي ويندوز به همان توابعي دسترسي دارند
كه برنامه هاي ديگر دارند .
در محيط چند وظيفه اي ويندوز ضروري است كه تمام برنامه ها در روش تعريف شده دقيق
عمل كنند . با استفاده از توابع API كه در تمامي برنامه هاي كاربردي استفاده مي شود اين سازگاري
بوجود مي آيد .
شايد شما ندانسته تا حالا بارها با API كار كرده باشيد. وقتي شما در محيط يك زبان برنامه
نويسي مثل Delphi يا Visual Basic يا هر محيط ديگري پروژه جديدي را آغاز مي كنيد و فرم
اوليه را روي صفحه آورده و آماده طراحي مي شويد در واقع استفاده از توابع API را آغاز كرده ايد .
در حقيقت در همان لحظه تابع Create Window فراخوانده شده است و فرم مزبور در مقابل شما
قرار مي گيرد كه خود اين تابع يكي از توابع API است .
از نظر برنامه نويس API شامل يك سري زير برنامه ي آماده و كاملا سالم مي باشد كه در
اختيار برنامه نويسان محيط ويندوز قرار مي گيرد.
مشخصات توابع API
اگر بخواهيم توابع API را تقسيم بندي كنيم به دو دسته 61 بيتي و 23 بيتي تبديل ميشوند كه
دسته 61 بيتي داراي 027 تابع و دسته 23 بيتي داراي 1077 تابع ميباشد .اين روالها درون فايلهايي وجود
دارند كه در پوشه هاي Windows و Windows\System ذخيره شده اند.
در توابع API مانند هر زبان برنامه نويسي متغير هاي ورودي و خروجي وجود دارد. اين متغير
ها ميتوانند از نوع long , integer , string , byte و ... باشند .
برخي از اين توابع ميتوانند فقط مقدار ثابت تعريف شده اي را بگيرند .
در تعدادي از توابع متغير هاي ورودي و خروجي يه يك ساختار TYPE اشاره دارند كه
فيلدهاي اين ساختار اطلاعات ورودي يا برگشتي تابع را در خود نگهداري ميكنند .
توابع API در كجا قرار مي گيرند؟
حتما اين سوال براي شما پيش آمده كه اين توابع قدرتمند در كجا قرار دارند؟ يا اينكه اين توابع
كجا هستند كه مي توانند به طور اشتراكي در چند برنامه و حتي خود ويندوز مورد استفاده قرار گيرند؟
ابتدا بايد مطالبي در مورد فايل هاي DLL بياموزيد .
DLL چيست؟
در حقيقت DLL ها هم مانند API ابزاري هستند كه شما از آنها استفاده كرده ايد ولي شايد
نمي دانستيد. اگر نگاهي به دايركتوري system يا windows يا System23 بيندازيد تعداد زيادي از
اين فايل هاي DLL مي بينيد !
Dynamic Linked Library (DLL) : به معناي كتابخانه پيوندي پويا مي باشد كه مي
تواند شامل انواع داده يا كد باشد. درون DLL ميتوان انواع داده ها همانند كد - تصوير - صوت و غيره
را قرار داد .
فايلهاي DLL در دسترس برنامه هايي كه به زبان ويژوال بيسيك و زبانهاي ديگري)كه از
DLL پشتيباني مي كنند( نوشته شده اند مي باشد.
نكته جالب فايل هاي DLL خاصيت مستقل از زبان برنامه نويسي اين فايل ها مي باشد. يعني
اگر DLL با استفاده از Delphi ايجاد شده باشد مي تواند Visual Basic يا Visual C++ از آن
استفاده كرد .
نكته ديگر DLL ها صرفه جويي در مصرف حافظه مي باشد كه به همين دليل نام Dynamic
را به همراه خود دارند. در واقع هر قسمت از DLL كه فراخواني مي شود همان قسمت به حافظه بار
مي شود و در صورت عدم نياز هم از حافظه خارج مي شود .
در واقع دلايل استفاده از DLL را موارد زير را مي توان نام برد :
 توانايي اشتراكي كردن كد بين چند برنامه و حتي خود ويندوز
 استفاده مجدد از كد هاي نوشته شده .
 استفاده بهينه از منابع ويندوز و منابع سيستم .
 جدا كردن كد هاي مختلف از هم .
لازم به ذكر است كه DLL ها را مي توان به زبان هايي مانند Delphi و Visual C++ توليد
كرد .
حالا مي توانيم به سوال قبلي پاسخ دهيم . API درون فايلهايي وجود دارند كه در پوشه هاي
Windows و Windows\System ذخيره شده اند. هنگام نصب ويندوز فايلهاي DLL نيز ذخيره
مي شوند ، پس به طور اتوماتيك به اين كتابخانه ها دسترسي داريد.
مهمترين DLL ها كه بيشترين API ها را در خود جا داده اند عبارتند از Kernel23.DLL و User23.DLL و Shell23.DLL و ... البته DLL هاي ديگري هم وجود دارند !
اكثر فايلهاي DLL پسوند .DLL يا .EXE دارند.هربرنامه اي كه مي نويسيد به اين فايلها
دسترسي دارد.اين فايلهاي DLL در ويرايش هاي قديمي تر ويندوز )قبل از 50 ( هم وجود داشتند ،
منتها اين فايلها شماره 23 را )كه نشان دهنده سازگار 23 بيتي است(در نام خود نداشتند.ويرايشهاي قبل
از ويندوز 50 سيستمهاي 61 بيتي بودند ، بدين معني كه انتقال اطلاعات با نرخ 61 بيت يا دو بايت
انجام مي شد.برنامه نويسي در محيط هاي 23 بيتي ، انعطاف بيشتر ، سرعت زيادتر و كارايي بالاتر را در
مقايسه با يك محيط 61 بيتي قديمي دارد.
سه فايل كه عمدتا استفاده مي شوند عبارتند از:
 Usre23.DLL : شامل توابعي است كه محيط ويندوز و واسط كاربر
مثل مكان نماها ، منوها و پنجره ها را كنترل مي كند .
 Gdi23.DLL : شامل توابعي است كه خروجي برنامه به صفحه تصوير
و ابزارهاي ديگر را كنترل مي كنند.
 Kernel23.DLL : شامل توابعي است كه سخت افزار و واسط نرم
افزار داخلي ويندوز را كنترل مي كنند.اكثر روالهاي مربوط به حافظه ، فايل و دايركتوري
درون Kernel23.DLL قرار دارند.
توجه: ويندوز يك سيستم عامل است كه از چند لايه تشكيل شده است.شروع اين لايه ها با
واسط گرافيكي كاربر يا GUI(Grapical User Interface) است كه كاربر مي بيند و ختم آنها با
نزديك ترين لايه به سخت افزار است كه جريان داده ها بين برنامه و سخت افزار را كنترل مي كند. اين
پايين ترين سطح سيستم عامل را هسته اصلي (Kernel) مي گويند. بنابراين نام Kernel23.DLL
مربوط به كتابخانه اي است كه تعدادي روال بر مبناي هسته اصلي را دارد.
اين سه فايل بيشتر روالها يا توابع API را نگه مي دارند.با يك نگاه كوتاه به پوشه هاي
Windows و Windows \ system چند كتابخانه پيوند ديناميكي ديگر را نيز مي بينيد مثل
COMDLG.DLL,MAPI23.DLL,NETAPI23.DLL و WINMM.DLL . همچنانكه
مايكروسافت قابليتهايي را به سيستم عامل اضافه مي كند، فايلهاي جديد DLL هم ظاهر مي شوند.
فايلهاي DLL فقط قسمتي از ويندوز نمي باشند . وقتي يك برنامه جديد را به سيستم خودتان
اضافه مي كنيد.اين برنامه DLL خاص خودش را فراهم مي كند.بنابراين در طول زمان تعداد زيادي فايل
DLL روي سيستم خودتان خواهيد داشت.
ماهيت فايلهاي DLL :
اصطلاح پيوند ديناميكي معاني خاصي براي برنامه نويسان دارد.وقتي گفته ميشود كه يك روال با
يك برنامه پيوند ديناميكي دارد بدين معناست كه اين روال)سابروتين يا تابع( تا قبل از ترجمه برنامه به
آن متصل نمي شود .اين تابع فقط در زمان اجرا در دسترس برنامه مي باشد.توابعي كه درون پنجره كد
مي نويسيد داراي پيوند استاتيكي ميباشند،يعني هر وقت برنامه را ترجمه مي كنيد اين توابع با بقيه كد
اصلي تركيب مي شوند.اما فايلهاي DLL برنامه تركيب نمي شوند. برنامه شما به اين روالها در زمان
اجرا دسترسي دارداما فايل EXE برنامه شامل روالهاي واقعي DLL نمي باشد.
اين توابع زماني با ارزش است كه مي خواهيد توابع را به عنوان كتابخانه هاي پيوند ديناميكي
استفاده كنيد، زيرا كتابخانه يا توابعي كه برنامه شما احضار مي كند هيچوقت قسمتي از برنامه شما
نيستند.توابع API اندازه فايلهاي برنامه شما را زياد نمي كنند.حين اجراي برنامه اين روالها در مواقع
ضروري بار مي شوند ، در ادامه چنانچه ديگر نيازي به آنها نباشد سيستم عامل ويندوز مي تواند منابع را
آزاد كندتا حافظه و وقت CPU صرف روالهاي جديد شود.
اما مزيت عمده پيوند ديناميكي اين نيست كه موجب افزايش راندمان منابع مي گردند.چنانچه
ويندوز تغيير كند اين فايلهاي DLL با ويرايشهاي جديد DLL بايد جايگزين شوند.بنابراين برنامه شما
قادر است تا از قابليتهاي جديد ويندوز استفاده كند بدون آنكه مجبور باشيد همه برنامه هايي را كه از
API ويندوز استفاده ميكنند مجددا ترجمه كنيد.به عنوان مثال در ويندوز 50 ظاهر پنجره ها تغيير
كرد.شمايلهاي موجود در گوشه بالا و سمت راست يك پنجره نسبت به ويندوز 66 . 2 تفاوت دارند.اما
هر برنامه ويژوال بيسيك كه براي نمايش پنجره يك تابع API ويندوز را احضار مي كند در همه
محيطهاي ويندوز اينگونه عمل مي كند. يعني اين برنامه وقتي در محيط ويندوز 66 . 2 اجرا ميشود
شمايلهاي قديمي را نشان ميدهد با وجودي كه برنامه را تغيير نداده ايد. در نتيجه در اكثر مواقع وقتي از
ويرايشهاي مختلف ويندوز استفاده ميكنيد، برنامه هاي شما كه به API ويندوز دسترسي دارند به هيچ
تغييري نياز ندارند.
نكته 6: ويندوز فقط يك برنامه بزرگ نيست ، بلكه مجموعه اي از تعداد زيادي برنامه است كه
برخي از آنها درون فايلهاي DLL قرار دارند .شايد ويندوز خودش بزرگترين استفاده كننده از فايلهاي
DLL باشد.
نكته 3:مزيت استفاده از روالهاي DLL آن است كه چند برنامه اجرايي تحت ويندوز ميتوانند به
يك روال از فايل DLL دسترسي داشته باشند
دلايل استفاده از توابع API
-6 توابع API به دليل اينكه در فايلهاي DLL هر سيستم عامل ويندوز ميباشند و
در هر مكان مانند يكديگر ميباشند پس نيازي به ارايه ي آن فايل DLL در نسخه برنامه
نميباشد و در نتيجه حجم نسخه كم ميشود .
-3 بيشتر توابع كارهايي را انجام ميدهند كه زبان هاي برنامه نويسي قادر به انجام
آن كار نيست .
مدير دسترسي عمومي براي نوشتن را غيرفعال كرده.
مدیران انجمن: هانیه سلیمانی