|
Tizimli dasturlash
|
bet | 50/64 | Sana | 13.05.2024 | Hajmi | 183,36 Kb. | | #230077 |
Bog'liq Системное программирование, практикаNazorat savollari:
MDI ilovasini qanday yaratish mumkin ?
MDI ilovalari nima uchun ?
MDI ilovasining xususiyatlarini keltiring .
Tavsiya etilgan o'qish: 1,2,3.
14-son LABORATORIYA ISHI
Mavzu: DLL yaratish va ulardan foydalanish jarayoni
Ishning maqsadi : DLL kutubxonalaridan foydalanish ko'nikmalarini rivojlantirish .
Ishlash vaqti 2 soat
Nazariy material
Ilova yaratish deyarli mumkin emas Windows bu kutubxonalardan foydalanmaydi DLL. IN DLL barcha Win32 funktsiyalarini o'z ichiga oladi API va Win32 operatsion tizimlarining son-sanoqsiz boshqa xususiyatlari.
Umuman aytganda, DLL - ular shunchaki kutubxonalarga to'plangan funktsiyalar to'plamidir. Biroq, ularning statik qarindoshlaridan farqli o'laroq (fayllar . lib), kutubxonalar DLL havola muharriri yordamida bajariladigan fayllarga bevosita biriktirilmaydi. Bajariladigan fayl faqat ularning joylashuvi haqidagi ma'lumotlarni o'z ichiga oladi. Dasturni bajarish vaqtida butun kutubxona yuklanadi. Bu turli jarayonlarga xotirada bir xil kutubxonalarni almashish imkonini beradi. Ushbu yondashuv ko'plab umumiy kutubxonalardan foydalanadigan bir nechta ilovalar uchun zarur bo'lgan xotirani qisqartirish, shuningdek, EXE fayllari hajmini boshqarish imkonini beradi.
Biroq, kutubxonadan faqat bitta dastur ishlatilsa, uni oddiy, statik qilib qo'ygan ma'qul. Albatta, agar unga kiritilgan funktsiyalar faqat bitta dasturda ishlatilsa, siz unga mos keladigan manba matn faylini kiritishingiz mumkin.
Ko'pincha loyiha ulanadi DLL bog'lanish vaqtida statik yoki bilvosita. Yuklanmoqda DLL Dastur bajarilganda, u operatsion tizim tomonidan boshqariladi. Biroq, DLL dastur ishlayotgan vaqtda aniq yoki dinamik tarzda yuklanishi mumkin.
Kutubxonalar import qilish
Statik ulanish bilan DLL .lib faylining nomi buyruq satrida yoki yorliqda havola muharririning boshqa parametrlari orasida aniqlanadi. "Bog'lanish" dialog oynasi "Loyiha sozlamalari" muhiti Developer Studio. Biroq, .lib fayli ishlatilgan bilvosita aloqa bilan DL L, oddiy statik kutubxona emas. Bunday .lib fayllari deyiladi kutubxonalarni import qilish (import kutubxonalari). Ular kutubxona kodini o'z ichiga olmaydi, faqat fayldan eksport qilingan barcha funktsiyalarga havolalar DLL unda hamma narsa saqlanadi. Natijada, import kutubxonalari odatda DLL fayllaridan kichikroq bo'ladi. Ularni qanday yaratish haqida keyinroq qaytamiz. Endi dinamik kutubxonalarni bilvosita kiritish bilan bog'liq boshqa masalalarni ko'rib chiqamiz.
Interfeys muzokaralari
O'zingizning yoki uchinchi tomon kutubxonalaringizdan foydalanganda siz funktsiya chaqiruvini uning prototipi bilan moslashtirishga e'tibor berishingiz kerak bo'ladi.
Agar dunyo mukammal bo'lsa, dasturchilar kutubxonalarni ulashda funksiya interfeyslarini moslashtirish haqida tashvishlanishlari shart emas - ularning barchasi bir xil bo'lar edi. Biroq, dunyo mukammal emas va ko'plab yirik dasturlar C++ tilisiz turli kutubxonalar yordamida yoziladi.
Birlamchi in Vizual C++ funksiya interfeyslari C++ qoidalariga mos keladi. Bu shuni anglatadiki, parametrlar stekga o'ngdan chapga suriladi va qo'ng'iroq qiluvchi funktsiyadan chiqishda va uning nomini kengaytirishda ularni stekdan olib tashlash uchun javobgardir. Ism kengaytmasi (ismni buzish) havola muharririga haddan tashqari yuklangan funktsiyalarni farqlash imkonini beradi, ya'ni. nomlari bir xil, lekin argumentlar roʻyxati har xil boʻlgan funksiyalar. Biroq, eski C kutubxonasida kengaytirilgan nomli funksiyalar mavjud emas.
S tilidagi funksiyani chaqirishning boshqa barcha qoidalari C++ da funksiyani chaqirish qoidalari bilan bir xil bo‘lsa-da, funksiya nomlari C kutubxonalarida kengaytirilmagan. Ulardan oldin faqat pastki chiziq (_) qo'yiladi.
Agar siz C kutubxonasini C++ dasturiga ulashingiz kerak bo'lsa, ushbu kutubxonaning barcha funktsiyalari C formatida tashqi deb e'lon qilinishi kerak:
extern " C " int MyOldCFunction(int myParam);
Kutubxona funktsiyalari deklaratsiyasi odatda kutubxonaning sarlavha fayliga joylashtiriladi, lekin ko'pchilik C kutubxonalarining sarlavhalari C++ loyihalarida foydalanish uchun mo'ljallanmagan. Bunday holda, siz sarlavha faylining nusxasini yaratishingiz va unga modifikatorni kiritishingiz kerak tashqi "C" foydalanilgan barcha kutubxona funktsiyalari deklaratsiyasiga. Modifikator extern "C" direktivasi yordamida butun blokga ham qo'llanilishi mumkin #o'z ichiga oladi eski sarlavha fayli C kiritilgan Shunday qilib, har bir funktsiyani alohida o'zgartirish o'rniga, faqat uchta qatorni olishingiz mumkin:
tashqi " C "
{
#o'z ichiga "MyCLib.h"
}
Eski versiyalar uchun dasturlarda Windows til funksiyalarini chaqirish konventsiyalaridan ham foydalanilgan PASKAL funktsiyalar uchun Windows API. Yangi dasturlar modifikatordan foydalanishi kerak winapi, ga aylantirilishi mumkin _stdcall. Garchi bu standart C yoki C++ funksiya interfeysi bo'lmasa-da, u funksiyalarni chaqirish uchun ishlatiladi Windows API. Biroq, odatda bularning barchasi standart sarlavhalarda hisobga olinadi Windows.
Yashirin DLL yuklanmoqda
Ishga tushganda, dastur barcha fayllarni topishga harakat qiladi DLL ilovaga bilvosita bog'langan va ularni ushbu jarayon bilan band bo'lgan RAM maydoniga joylashtiring. Fayllarni qidirish DLL operatsion tizim quyidagi ketma-ketlikda amalga oshiriladi.
EXE fayli joylashgan katalog.
Jarayonning joriy katalogi.
Tizim katalogi Windows.
Agar kutubxona DLL topilmasa, dastur uning yo'qligi va qidiruv amalga oshirilgan yo'llar haqida xabar bilan dialog oynasini ko'rsatadi. Keyin jarayon yopiladi.
Agar kerakli kutubxona topilsa, u jarayonning operativ xotirasiga joylashtiriladi va u erda jarayon oxirigacha qoladi. Endi ilova tarkibidagi funksiyalarga kirishi mumkin DLL.
Dinamik yuklash va tushirish DLL
Ilova xotiraga birinchi marta yuklanganda Windows dinamik ravishda DLL bilan bog'lanishi o'rniga, dasturni ish vaqtida kutubxona moduliga bog'lashingiz mumkin (bu usul bilan dasturni yaratishda import kutubxonasidan foydalanish shart emas). Xususan, siz foydalanuvchi uchun qaysi DLL-lar mavjudligini aniqlashingiz yoki foydalanuvchiga qaysi DLL-larni yuklashni tanlashiga ruxsat berishingiz mumkin. Shu tarzda siz turli xil amallarni bajarish uchun bir xil funktsiyalarni bajaradigan turli DLL-lardan foydalanishingiz mumkin. Masalan, mustaqil ma'lumotlarni uzatish uchun mo'ljallangan dastur ish vaqtida TCP/IP protokoli yoki boshqa protokol uchun DLL-ni yuklashni hal qila oladi.
|
| |