ملفات .h هى مجرد header يدمج كجزء من الكود فى ملف الcpp تماما و كأنك كتبته فى رأس الملف, غرضه تنظيمى ليس أكثر بالاضافة الى امكانية استدعاء هذا الملف (التعريفات فقط) الى الملفات الأخرى فى الكود (استدعاء دالة فى ملف من ملف اخر).
مثلا لنفترض ان ملف file.h يحتوى على
int func();
هو تماما نفسه عندما تضع
int func();
على رأس ملف file.cpp ,
لكن بالطبع فى هذه الحالة كيف سوف تضيف تعريفات file.cpp الى ملف اخر لاستدعاء الدالة func؟
بدون ملفات .h سوف تضطر الى كتابة برنامجك كله فى ملف واحد كبير, و هذا ليس جيدا.
ملفات .lib و ملفات .dll متشابهين الى حد ما, كلاهما ملف بلغة الألة يحتوى على مجموعة من الاجراءات التى يمكن استدعائها.
ملفات .lib تنضم الى الملف النهائى .exe و تصبح جزءا منه.
ملفات .dll تختلف عن ملفات .lib فى كونها لا تنضم الى الexe, بل هى تظل ملف منفصل عنه, و يتم تحميله بواسطة النظام عندما يطلب الexe ذلك.
الفائدة هنا كبيرة, مثلا يمكنك تبديل ملفات .dll بحسب سير البرنامج, كما يمكنك اضافة امكانيات جديدة للبرنامج دون ان تضيف الى الكود الأصلى, ما يسمى بالextensions
كمثال,
لدينا قارىء صور متعددة مثلا, يقرأ ملفات bmp, و jpeg, و gif,
طيب لكى تبرمجه عليك ان تكتب function منفصلة لكل نوع ملفات.
الطريقة الأخرى هى ان تستدعى function واحدة اسمها ReadPicFile() تقوم بارجاع كيفية رسم الصورة بشكل قياسى,
ثم نصنع ثلاثة ملفات dll كل ملف يحتوى على نفس الاجراء RedPicFile لكن التنفيذ بشكل مختلف.
يقوم برنامجك باضافة الext الخاص بالصورة لكل ملف dll ثم يقوم باستدعاءه اوتوماتيكيا,
مثلا ملف .bmp موجود فى الملف readbmp.dll و jpg موجود فى readjpg.dll و هكذا,
سوف يقوم برنامج باضافة امتداد الصورة الى ملف dll و استدعاؤه, ثم استدعاء نفس الدالة كل مرة ReadPicFile,
أين الفائدة هنا؟
لقد اخترعوا نوع جديد هو .png؟ ماذا تفعل؟
بكل بساطة, سوف تضيف معالجة صور .png الى الملف readpng.dll, و هكذا فجأة أصبح برنامجك قادر على قراءة نوع جديد تماما, لقد أضفت قدرة كبيرة الى برنامج دون ان تمس بالنص الأصلى!!
ليس هذا فقط, لنفترض انك قررت ان تفتح لبرنامجك أفاق جديدة عبر امكانية المبرمجين الاخرين اضافة الextensions اليه, فهم قادرين عبر ضوابط معينة الى اضافة تعريف ملفات جديدة فقط عبر كتابة الdll بنفسهم, دون ان يمسوا او يتعرضوا للكود الأصلى.
التعليقات