 بسم اللہ الرحمن الرحیم آج ہم موڈیول 86 دیسکریں گے موڈیول 86 ہے about DLL version management ہم نے دیکھا ہے کہ DLLs یہ ایک بڑا پورفول ٹول ہے اس کے اندر آپ کوڑ کو سب سے ایک کئی روانٹیجوں میں ایک بڑا روانٹیج ہے that is کوڑ شیرنگ یعنی کہ آپ اس کے اندر کوڑ کو انکپسلیٹ کر کر داتے ہیں اور پھر کئی سارے پروسیس اس کوڑ کو شیر کر سکتے ہیں یہ اس کی سرنگت ہے لیکن اس کی وجہ سے فیوہ ہمیں کمپلکیشنز کا بھی سامنا ہوتا ہے اور کمپلکیشنز اسی وجہ سے اکر ہوتی ہیں کیونکہ ملٹپل پروسیس اس ایک DLL کو use کریں اچھا اس میں ایک اور سرنگت بھی ہے DLL کی کہ اگر آپ اس کے اندر کوئی چینج کر داتے ہیں ایک آپ نے DLL بنائی آپ نے اس کو use کیا مختلف اپلکیشنز کے اندر اب آپ کو لگتا ہے کہ اس کے اندر کچھ امبرورنٹ کی ضرورت ہے تو اس DLL کو آپ امبرورنٹ کر داتے ہیں اس کی کوڑ کو چینج کر داتے ہیں موڈیفائی کر داتے ہیں اور اگین DLL کو وہاں پر پلیس کر داتے ہیں اگر تو اس DLL کے اندر کسی کسم کے اندر فیسز نہیں چینج ہوئے تو آپ کو اپلکیشن جو ہے وہ اس اپڑیٹٹیتی version کو use کرتا رہے گا اور بالکل صحیح چلے گا کسی کسم کی problem نہیں آئے گی تو یہ بھی اس کی ایک strength ہے کہ DLL کی اپلکیشن جو آپ کرتے ہیں تو آپ کو actual جو program ہے اس کو چینج کرنے کی ضرورت نہیں ہے لیکن جب آپ DLLs use کرے ہیں تو کچھ مشکلات کا سامنہ آ سکتا ہے جب اس طرح سے DLLs کے اندر اپلکیشن ہو رہی ہیں وہ آپ کو مشکل کچھ پیدا کر سکتی ہیں اور پھر ہمیں ان مشکل کو resolve کرنے کے لیے کیا کرنا پڑتا ہے version management کرنی پڑے جاتی ہے ہمیں اپلکیشن کے اندر کچھ اس طرح سے logic بنانا پڑے گا جو کہ ایک SPECIFIC version کو target کریں کیا کمپلکیشن آ سکتی ہیں کمپلکیشن یہ ہاں سکتی ہیں کہ جی اگر آپ پر ایکزمپل انٹرفیس چینج کر دیتے ہیں یعنی کہ جو آپ نے DLL کے اندر functions لکھے میں ان functions کے جو list of parameters ان کو آپ چینج کر دیتے ہیں کام کر دیتے ہیں زادہ کر دیتے ہیں types اس کی چینج کر دیتے ہیں تو اف course جو previous program لکھا ہوئے جو کہ previous انٹرفیس کو use کر رہا ہے وہ previous program جو ہے سایتری کیسے work نہیں کر سکے گا پھر اس میں یہ بھی ہو سکتا ہے کہ آپ نے DLL بناکی رکھی ایک پرانی DLL ہے ایک نئی DLL ہے دونوں DLL بنیویں ہیں جو پرانا program ہے وہ پرانی DLL کو use کر رہا ہے کوئی اور program لکھتے ہیں وہ نئی DLL کو use کرتا ہے اب جو نئی program ہے اس کے اندر ہو سکتا ہے کہ کسی وجہ سے کوئی پاتھ کی گربڑو یا کچھ miss understanding ہو سکتا ہے وہ جو program ہے وہ پرانی DLL کے ساتھ لیں کریں جو وہ پرانی کے ساتھ لیں کریں تو آپ کو جو results آپ ایکسپیکٹ کریں وہ results نہیں ملیں گے کیونکہ اس کے اندر وہ functionality نہیں ہے تو یہاں بھی بڑی confusion بنا ہو سکتی ہے تو اس طرح کی سرٹن complication کا سامنا کرنا پڑتا ہے جب آپ DLL کے multiple versions کے ساتھ deal کریں اور پھر اس کا کیا resolution ہے اس کا resolution ہے کہ version management ایک بڑا سان طریقہ یہ ہے کہ جی ہم جتریں بھی نئے versions بنتے ہیں اس کے لئے علاق سے ایک directory بنالیں اور جب آپ نے اس deal کو use کرنا تو اس کی specific directory میں سے ہی اس کو دینامیکلی load کیا جائے لیکن اس سے بہتہ سلوشنز ہمارے پاس موجود ہیں ایک سلوشنز یہ ہے کہ آپ نام کے اندر version شامل کردے جس طرح یہ ہمارے پاس اگر use کی اس example کے اندر use کی اگر DLL ہے تو use کے نام کے ساتھ اس کا version بھی لکھتا ہے جس طرح 4.0 اگر اس کو version ہے اس کے نام کے اندری 4 underscore o آپ نے شامل کر دیا اور جو live file ہے اس کے اندر بھی اسی طرح سے بلکل exact same file name ہوگا تو اس طرح سے بھی آپ versions کو ہندل کر سکتے ہیں کہ ایک پرانی ہے اس کا version 3 ہے نہیں ہے اس کا version 4 ہے جس نے پرانے کے ساتھ لنک کرنا ہے وہ 3 کے ساتھ کرے گا جس نے نے کے ساتھ لنک کرنا ہے وہ 4 کے ساتھ لنک کرے گا تو جو بھی آپ کی application ہے اس کو of course پکرامر کو پتا ہوا کہ اس کی کیا requirement ہے کسا version اس نے use کرنا ہے تو اس version کے according لیحی پھر وہ اس dll کو اپن کرے گا اس کے لہاں microsoft نے ایک اور تکنیک دویلب کیا ہے جس کو side by side dll assemblies کہتے ہیں تو یہ side by side dll assemblies جو ہے ان کو use کر کے یہ version management بھی کی جا سکتی ہے یہ confusion دور کی جا سکتی ہے لیکن اس میں requirement ہوتی ہے جو بھی آپ کی application ہے وہ xml کے اندر application not dll application جو ہے وہ xml کے اندر اپنی version requirement جو ہے وہ specify کرے جو بھی dll requirement اس کو specify کرے تو پھر microsoft کا framework جو اس version کی take care کرتا اس کے لہاں microsoft ایک اور support Provide کرتا کہ جو آپ کی dll اس کے اندر ایک call back function آپ بنا سکتے ہیں call back function کیا ہوتا ایسے function جس کو کی operating system invoke کرتا عام طور پہ ایک program اگر آپ لکھتے ہیں تو اس کے اندر آپ مختلف procedures بناتے ہیں functions بناتے ہیں اور اس ان functions کو آپ call کریں یا اگر وہ function export ہو رہا ہے تو بہر سے کوئی اور application اس کو call کر رہی ہے لیکن call back function ایسا function ہوتا ہے جس کو کے operating system call کرتا اور operating system اس call back function کو کیسے use کرے گا اس call back function کو اس specific dll کا version چیک کرنے کے لیے جو ہے use کرے گا تو جب بھی operating system کو version کی ضرورت پڑے گی تو اس call back function کو call کرے گا اور وہاں سے version کی information لے سکتا اور اس version کی according لی اس کے اوپر operation perform کیا جا سکتا یا کسی API کے تھرو آپ بھی دینامیک لی اس dll کی information get کر سکتے ہیں اس کا version get کر سکتے ہیں اور decided کر سکتے ہیں کہ آپ نے اس dll کے سات لنک کرنام تو یہ call back function دیکھتے ہیں call back function کس طرح سے کام کرے گا اس call back function کا نام ہے dll get version اور اس کو just ایک structure pass ہو رہا ہے اور وہ structure ہے dll version اور اس کا pointer pass کیا جا رہا ہے اس dll version کے اندر version سے relevant کی ساری fields ہے سب سے پہلی field ہے dw major version اور dw minor version پھر dw builder number ہے اور پھر dw platform ID ہے یہ جو platform ID ہے یہ سے آپ کو پتہ چلے گا کہ یہ کنسا platform ہے windows nt ہے یا windows 9x ہے یا کوئی اور ہے تو اگر تو dll version platform nt ہے اس کی value dll version platform nt یہ آپ کا constant ہے جو windows.h کے اندر find ہے اگر اس کی value یہ ہے تو اس کا مطلب ہے اس کا مطلب ہے کہ اس پہ جو windows 9x ہے یعنی کہ 95 98 وگرہ جو windows پرانی اب تو خیر وہ اتنی use نہیں ہو رہی لیکن اگر کیں ہے تو وہ اس کے پران نہیں کی جا سکتی ہے یہ dll windows 9x کیلئے نہیں بنی اور اگر dll version platform windows ہے تو اس کا مطلب windows کے ہر platform کے ساتھ یہ dll work کرے گی پھر cb size ہے cb size اس کی value عام طور پہ dll version کی size کے برابہ رکھے جاتی ہے اس فیلٹ کو dll version کا جو structure ہے اس کے size کے ایک کلنٹ سیٹ کیا جاتا جو dw major version ہے اور dw minor version ہے اس کے اندر آپ سپیسفائے کریں گے اپنے dll کے version کو یعنی کہ جو version ہے اس کا major part اور اس کا minor part عام طور پہ اسی طرح دو parts کے اندر versions کو دوائیڈ کے جاتا ہے major and minor اپنے پیویس ایک سامپل کے اندر دیکھتا 4.0 4 اس کا major ہے اور point کے آگے o جو ہے وہ اس کا minor ہے اور اس کے لیوہ build a number بھی اسائن کیا جا سکتا تو جو بھی version سے relevant information ہے وہ آپ اس call back function کو implement کرتے ہیں اپنی dll کے اندر اور اس data structure کے اندر آپ اس information کو place کرتے ہیں اب جب بھی اس call back function کو invoke کیا جائے گا وہاں سے ہمیں dll کے version کی information مل سکتی ہیں