برنامه نویسی API در سی شارپ
برنامهنویسی API که در این مقاله یاد میگیرید
آشنایی با توابع API ویندوز به منظور تولید برنامههای سیستمی
بررسی مثالهایی از کار با توابع API
بهدست آوردن اطلاعات سیستمی که برنامه ما بر روی آن در حال اجرا میباشد
بهدست آوردن آخرین خطایی که در سیستم رخ داده است
در مقاله قبل با برنامه نویسی سیستمی و کرنل ویندوز آشنا شدید که مقدمهای بر برنامهنویسی سیستمی بود.
Application Programming Interface (API)
توابع API ویندوز یا WindAPI اساس برنامهها در این سیستمعامل هستن، این توابع امکان استفاده از ویژگیهای سیستمعامل (در مد هسته) را برای برنامههای کاربردی ایجاد میکنند، بدون اینکه برنامهنویس با چگونگی عملکرد این توابع درگیر شود، توابع API ویندو در فایلهای DLL قرار دارند و به همین دلیل استفاده از آنها بسیار ساده است، از آنجایی که در این کتاب به دفعات از این توابع استفاده خواهد شد، ابتدا به بررسی فایلهای DLL و سپس نحوه فراخوانی توابع API از این فایلها میپردازیم.
کتابخانههای پیوندی پویا (Dynamic Link Libraries:DLL)
برای فراخوانی توابع API در برنامههای ویندوز، ابتدا باید فایل DLL که حاوی تابع مورد نظر است در زمان اجرا به برنامه Import شود، یک فایل DLL به صورت پویا در حین اجرای برنامه به آن متصل میشود، در زمان کامپایل و پیوند به فایل DLL نیازی به وجود این فایلها نمیباشد، این امر بزرگترین حسن فایلهای DLL است که مزیتهای زیر از آن نشات میگیر:
- کاهش حجم کد برنامه
- قابلیت استفاده از کتابخانهها توسط دیگر برنامهها
- به روزرسانی کتابخانه بدون نیاز به پیوند مجدد برنامه
در ویندوز processها میتوانند توابع یک DLL را فراخوانی کنند، همچنین یک DLL میتواند دارای متغیرهایی باشد که بین فرایندها مشترک بوده و یا برای هر فرایند مجزا باشد، این خاصیت استفاده مشترک از متغیرهای DLL، یکی از روشهای برقراری ارتباط بین فرایندها میباشد، اگر DLL به علت فراخوانی یک تابع از یک فرایند در حافظه بارگذاری (Load) شده باشد، با فراخوانی یک فرایند دیگر مجددا بارگذاری نمیشود، بلکه برای فراخوانی فرایندهای دوم به بعد تنها نگاشتی به آن ایجاد میگردد، این امر باعث صرفه جویی در مصرف حافظه سیستم میشود.
برای فرواخوانی توابعی از یک DLL در #C به این صورت عمل میکنیم که ابتدا نام کتابخانه را مشابه آنچه در قطعه کد زیر مشاهده میکنید به برنامه (Import) کرده و سپس تابع موردنیاز از آن کتابخانه را به صورت Extern تعریف میکنیم تا مترجم #C بدان که این تابع قرار است در زمان اجرا به برنامه متصل شود و محل تعریف آن نیز درون فایل برنامه ما نیست.
[DLLImport(“[نام کتابخانه و ویژگی ها]”)]
static extern[مقدار برگشتی][نام تابع]([لیست پارامترها]);
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.