تعريف API
API به معني رابط برنامه کاربردي به مجموعه اي از دستورات گفته مي شود، که رابط بين برنامه ها و پردازنده است.
معني ديگري که در منابع فارسي گفته شده است: API مجموعه دستوراتي است براي برقراري ارتباط بين اجزاي سيستم عامل و برنامه ها.
API در سيستم عامل هاسيستم عامل هاي مختلف، API هاي مختلف را ارائه ميدهند و به همين خاطر است که وقتي برنامه نويس ، برنامه خود را با API ويندوز پايه گذاري مي کند، آن برنامه يا نرم افزار در سيستم عامل لينوکس قابليت اجرايي ندارد.
API سيستم عامل ويندوز Windows API ، لينوکس Xlib و مک Mac OS X) Cocoa) است.
API سيستم عامل ويندوز Windows API ، لينوکس Xlib و مک Mac OS X) Cocoa) است.
اگر يک جستجوي کوچک درمورد Api ها به زبان فارسي انجام داده باشيد، مي بينيد که در بيشتر مطالبي که درمورد API نوشته شده است، گفته شده است که Mac از Carbon استفاده مي کند.Cocoa يک فريم ورک جديدتر از Carbonاست. تفاوت اين دو را به اين صورت مي توان گفت که Cocoa يک لايه بالاتر از Carbon است و همچنين Carbon يک فريم ورک به صورت procedural و Cocoa يک فريم ورک به صورت object-oriented است. چون ادامه اين مبحث در قالب کلي اين وبلاگ نمي گنجد، بيشتر از اين درباره اين دو نوع APIصحبت نمي کنم و شما نيز براي اطلاع بيشتر از تفاوت اين دو مي تونيد عبارت " Cocoa vs. Carbon" را جستجو کنيد.
Windows API
Windows API شامل هزاران function ، structure و constant است که ما مي توانيم آن ها را در برنامه تعريف و از آن ها استفاده کنيم. براي اينکه بتوانيم از اين توابع استفاده کنيم، ابتدا بايد آن ها را معرفي کنيم و چون اين توابع با زبان C نوشته شده اند، اين کار کمي پيچيده خواهد بود. در ادامه توضيح داده خواهد شد که زبان هاي برنامه نويسي چگونه اين توابع را در اختيار برنامه نويسان قرار خواهند داد.
API ها را مي توان به سه دسته تقسيم کرد:
• Kernel
نام کتابخانه آن KERNEL32.DLL است و. قابليت هايي را که سيستم عامل به ما مي دهد را در بر دارد:-Process loading.
-Context switching.
-File I/O.
-Memory management.
• User
نام کتابخانه آن USER32.DLL است و براي کنترل نماي کاربري استفاده مي شود:-Windows
-Menus
-Dialog Boxes
-Icons etc.,
-Menus
-Dialog Boxes
-Icons etc.,
• GDI
نام کتابخانه آن GDI32.dll است. اين کتابخانه قابليت ايجاد خروجي هاي گرافيکي مانند پنجره ها، منوها و dialog box ها را ارائه ميدهد.
براي اطلاع از تقسيم بندي توابع و نام کتابخانه ها به لينک زير مراجعه کنيد
API و برنامه نويسي شما قبل از اينکه چگونگي استفاده توابع API را ياد بگيريد، بايد با مفهوم هاي مختلفي مثل شيوه هاي برنامه نويسي managed/unmanaged/Native ، کدهاي safe/unsafe و ... آشنايي داشته باشيد.
پيشتر مطلبي درمورد شيوه برنامه نويسي Native و Managed در اين وبلاگ قرار داده شده بود که در اين آدرس قابل دسترس است. اکثر زبان هاي پيشرفته برنامه نويسي اين امکان را به برنامه نويس ميدهند که از API ها استفاده کنند. در زبان هاي Native که به صورت مستقيم با API سرو کار دارند مي توان به زبان هاي ++C و Delphi و در زبان هاي Managed به #C و VB.Net اشاره کرد. در ++C دستورات در فريم ورک MFC، Microsoft Foundation Class جاسازي شده است و به همين خاطر ديگر نياز نيست که برنامه نويس تابع ها را تعريف کند.
در ادامه يک مثال از Delphi براي شما آورده شده است و نشان داده شده است که چگونه دلفي توابع API را در دل خود جاي داده است.
محيط دلفي را اجرا کرده ويک پروژه Console ايجاد کنيد و آن را به فرم زير تغيير دهيد.
محيط دلفي را اجرا کرده ويک پروژه Console ايجاد کنيد و آن را به فرم زير تغيير دهيد.
program TestConsoleDateTime; {$APPTYPE CONSOLE} uses SysUtils,Windows; var SystemTime:TSystemTime; begin GetLocalTime(SystemTime); Writeln( IntToStr(SystemTime.wHour)+':' + IntToStr(SystemTime.wMinute) +':'+ IntToStr(SystemTime.wSecond)); Readln; end.
اين برنامه ساعت سيستم را نمايش ميدهد. ما در کد بالا به کمک تابع GetLocalTime توانستيم ساعت جاري را بدست بياوريم. حال اگر کليد Ctrl را نگه داريد و روي کد GetLocalTime در برنامه کليک کنيد، محيط دلفي شما را به صفحه جديدي (کد يونيت Windows)هدايت خواهد کرد. در صفحه جديد کد زير به نمايش در خواهد آمد
procedure GetLocalTime; external kernel32 name 'GetLocalTime';
در اينجا براي دلفي تعريف شده است که با فراخواني پروسيجر GetLocalTime ، تابع GetLocalTime در kernel32.dll فراخواني شود.
همانطور که ديديد دستورات API در داخل دستورات دلفي قرار داده شده اند و ما بدون اينکه آن ها را تعريف کنيم، و يا از ساختار آن با خبر باشيم مي توانيم از آن ها استفاده کنيم. البته دانستن ساختار و استفاده از کد هاي API براي برنامه نويساني که از زبان هاي برنامه نويسي Native استفاده مي کنند اهميت بالايي دارد.
API در #C
براي استفاده از توابع API در برنامه خود، ابتدا بايد با ساختار توابع آشنا باشيم. به عنوان مثال براي تابع GetLocalTime در MSDN ساختار زير تعريف شده است
procedure void WINAPI GetLocalTime( __out LPSYSTEMTIME lpSystemTime );
اين تابع خروجي ندارد و ورودي آن (lpSystemTime ) از نوع SystemTime است که بعد از فراخواني تابع مقداردهي مي شود.
در اين لينک ميتوانيد ساختار SystemTime را مشاهده کنيد.براي استفاده از تابع بايد ابتدا namespace زير را به Use ها اضافه کنيم
System.Runtime.InteropServices
[DllImport("kernel32.dll")] public static extern void GetLocalTime(out Win32.DateTime.SystemTime systemTime);
DllImport براي فراخواني کتابخانه هاي مديريت نشده (Unmanaged) به کار برده مي شود. در اينجا کتابخانه kernel32.dll معرفي شده است.
extern براي فراخواني توابعي که در خارج اجرا مي شوند به کار مي رود که در اين مورد حتما بايد با واژه static همراه باشد. اين واژه معمولا در هنگامي که از DllImport استفاده مي شود و قرار است کد Unmanaged اجرا شود به کار ميرود.
SystemTime يک ساختار است. که به صورت زير در برنامه تعريف ميکنيم
extern براي فراخواني توابعي که در خارج اجرا مي شوند به کار مي رود که در اين مورد حتما بايد با واژه static همراه باشد. اين واژه معمولا در هنگامي که از DllImport استفاده مي شود و قرار است کد Unmanaged اجرا شود به کار ميرود.
SystemTime يک ساختار است. که به صورت زير در برنامه تعريف ميکنيم
[StructLayout(LayoutKind.Sequential)] public struct SystemTime { public ushort Year; public ushort Month; public ushort DayOfWeek; public ushort Day; public ushort Hour; public ushort Minute; public ushort Second; public ushort Milliseconds; }
حال براي فراخواني تابع به روش زير عمل مي کنيم:
SystemTime sysTime; GetLocalTime(out sysTime); MessageBox.Show(System.String.Format("{0}:{1}:{2}", sysTime.Hour, sysTime.Minute,sysTime.Second));
در خط اول متغير sysTime از نوع SystemTime تعريف شده است. در خط دوم تابع GetLocalTime فراخواني شده است که در آن متغير sysTime به عنوان آرگومان خروجي داده شده است و در خط سوم تاريخ نمايش داده شده است.
براي آشنايي بيشتر يک نمونه برنامه در لينک زير قرار داده شده است
لينک يک Win32API.7z
يا
لينک دو Win32API.7z
تصويري از نماي برنامه
0 comments:
ارسال یک نظر