 بسم اللہ الرحمن الرحیم آج ہم موڈیول 85 دسکریں گے موڈیول 85 ہے about DLL entry points ہم نے دیکھا ہے PREVIOUSLY کہ windows جو ہے وہ ہر فائل کو as DLL treat کرتی ہے ان فکر جو آپ کی ڈیلیل بنتی ہے آپ کی جو ڈیلیل بنتی ہے وہ بھی DLL ہے اور جو آپ DLL فائل بناریں وہ بھی DLL ہے اس کے اندر کئی functions ہیں جو import ہو رہے ہیں اور کئی functions ہیں جو export ہو رہے ہیں ڈیلیل فائل کے functions ہے وہ بھی export ہو سکتے ہیں DLL فائل کے functions تو export ہوتی ہیں اور DLL فائل کے کچھ functions جو DLL کچھ functions کو import بھی کر سکتی ہے کسی دوسری DLL میں پڑے ہوئے functions جو ہم کو وہ call کر سکتی ہے اس کے لوہ جس طرح ہم دیکھتے ہیں کہ ڈیلیل فائل کے اندر ایک main ہوتا ہے وہ اس کا entry point ہوتا ہے جب بھی آپ اس اپلکیشن کو ران کرتے ہیں تو execution main سے start کرتی ہے ہمیشہاں اسی طرح DLL کے اندر بھی DLL کے صرف یہ کام نہیں ہے کہ اس کے اندر functions پڑھیں ہو اور آپ ان functions کو call کرے اور DLL ایک طرح سے دیکھا جائے تو بالکل ڈیلیل کی طرح ہیں اور DLL کے اندر بھی ایک main ہے اور وہ main then call ہوتا ہے جب بھی کوئی DLL کے ساتھ اپلکشن اٹح کرتی ہے تو یہ entry point آپ سپیسفائے کر سکتے ہیں DLL کے اندر لیکن یہ option لہاں یعنی کہ اگر آپ سمجھتے ہیں کہ آپ کو entry point کی ضرورت ہے جانبے آپ نے کوئی DLL کے لئے initialization کرنی ہے تو وہاں آپ یہ entry point جو ہے خریت کر دیں گے اس ڈیلل کے اندر سپیسفائے کر دیں گے تو جب بھی کوئی اپلکیشن اس ڈیلل کے ساتھ اٹیچ ہوتی ہے ڈیلل کو اپن کرتی ہے امپلسٹرٹلی یا ایکسپلسٹرٹلی تو وہ انٹری پورنٹ جو ہے وہ ایکزیکیوٹ ہو گا اس کو سپریس بھی کیا جا سکتا ہے آپ جائیں تو ایسا بھی کر سکتے ہیں کہ وہ انٹری پورنٹ نہ ایکزیکیوٹ ہو لیکن اگر کہیں پہ بھی لنکنگ ہو رہی ہے تو ڈیلل کا جو انٹری پورنٹ ہے وہ ایکزیکیوٹ ہو گا اور عام طور پہ اس انٹری پورنٹ کے اندر سرٹن انیشلائیزیشن اپریشنز پرفارم ہو گے اگر آپ امپلسٹرٹلی لنکنگ کر رہے ہیں تو امپلسٹرٹلی لنکنگ کی کس کے اندر جب بھی ڈیلل کسی پرگرام کے ساتھ اٹاج ہوتی ہے کسی پروسس کے ساتھ اٹاج ہوتی ہے تو یہ انٹری پورنٹ ایکزیکیوٹ ہو گا اگر آپ اور جب وہ پوکرام ختم ہو جاتا ہے ڈیلل سوڑ دیتی ہے یعنی کہ ایک پوکرام ایکزیکیوٹ ہو جاتا ہے اس کو اب ڈیلل کی جو اتنی رہتی وہ اس ڈیلل کیا بس کو جو اتنی ہے تو وہ ڈیلل سرٹ ڈیٹاچ ہو جائے گی امپلسٹرٹلنکنگ کی کس میں اور جب وہ ڈیٹاچ ہو جاتی ہے اگن تب انٹری پورنٹ کال ہوتا ڈیلل ہونے بھی انٹری پورنٹ کال ہوسکتا ڈیٹاچ ہونے بھی انٹری پورنٹ کال ہوسکتا ڈیلل لیوان ہے اور پھر آپ پر کرامیٹیکلی دیکھتے ہیں کہ کس وجہ سے انٹری پورنٹ ایکزیکیوٹ ہوا ہے ڈیلی کھوٹ آنے کے وجہ سے ہوا ہے یا ڈیٹاچ ہونے کی وجہ سے ہوا ہے اور اگر ڈیلی کھوٹ آنے کی وجہ سے ہوا ہے تو آپ انیشلایز شن ڈیلل وکرشن ڈیلل سوپر کریں گے اگر ڈیلی کھوٹ ہوئے تو آپ جو بھی آپ گاربج کلکشن ہے جو آپ کے رسورسز ہیں ان کو فری کرنے کے لیے کوڈ ایکزیکیوٹ کریں گے. ایکسپلیسرلنکنگ کے کس کے اندر کب اٹاچ ہوتا ہے دیلل جب آپ لوڈ لائبریڈی کا فنکشن کال کرتے ہیں یا لوڈ لائبریڈی ایکس کا فنکشن کال کرتے ہیں تب آپ کی دیلل جو ہے اٹاچ ہوتی ہے اور اسی وقتی اف course یہ انٹری پویںٹ ایکزیکیوٹ ہوگا اور دیلل جب فری لائبریڈی کال کرتے ہیں فری لائبریڈی کال کرنے کی سورت میں بھی یہ انٹری پویںٹ جو ہے ایکزیکیوٹ ہوگا اور ضروری نہیں ہوتا کہ ہمیشہ آپ کو دیلل کا مین ہے ایک آپ کو بتایا کہ اپشنل ہے کوئی ایسی سچویشنز بھی ہو سکتی ہیں جب آپ کو دیلل کا یہ انٹری پویںٹ ایکزیکیوٹ کرنے کی ضرورت نہ ہو اس سورت کے اندر آپ اس کو سپریس کر سکتے ہیں آپ ایسا بھی کر سکتے ہیں کہ انٹری پویںٹ ایکزیکیوٹ ناو لیکن اس کے لیے پھر اگر آپ دینامیک لنکنگ کر رہے ہیں تو دینامیک لنکنگ کے اس میں لوڈ لائبریڈی ایکز کا جو فنکشن ہے وہ آپ کو یہ چیس سپورٹ کرتے ہیں کہ آپ انٹری پویںٹ کی ایکزیکیوٹن کو سپریس کر سکے ہیں اس کے لیوہ ایک پروسس ہے پروسس کے اندر کئی ساری تھریڈز ران ہو رہی ہیں تو دیلل ایک پروسس جو ہے ایک دیلل میں یہ ہم دیکھتے ہیں اس کوڑ کی مدد سے یہاں پر ہم نے ایک دیلل کا فنکشن دیفائن کیا اس کی ریٹرن ٹائی بولیان ہے اس کے اندر ایک انسٹنس پاس کریں ایک دیورڈ ہے ریزن کہ کس وجہ سے یہ کال ہوا اور ایک ورد ہے جس کی ہم آگے مزید detail دیکھتے ہیں ایچ دیلل یہ وہ حنڈل ہے جو کہ آپ کو لوڈ لائیوری کا فنکشن جو ہے ریٹرن کرتا تو جو بھی لوڈ لائیوری نے فنکشن حنڈل ریٹرن کیا حنڈل تو ان انسٹنس وہ یہ دیلل مین کو پاس ہوتا اسی طرح جو وین مین کا فنکشن ہوتا جو وندوز کے اندر آپ اپلکیشن دناتے ہیں اس کو بیسی طرح سے حنڈل ریٹرن ہوتا اپلکیشن کا lp reserved lp reserved کی value اگر نال ہے تو اس کا مطلب ہے کہ جی explicit attachment ہوئی ہے اور اگر نال نہیں ہے تو اس کا مطلب ہے کہ جی implicit attachment ہوئی ہے ریزن کی ایچار ویلوز ہو سکتی ہیں dll process attach dll thread attach dll thread attach dll process attach کا مطلب ہے کہ جی process attach ہونے کی وجہ سے call ہو رہا thread attach ہونے کا مطلب ہے کہ جی detach ہونے کی thread جو ہے اس نے free library کی API call کیا یا process نے اگر free library کی API call کیا تو process کی case میں process detach value ہوگی اور thread کی case میں thread detached value ہوگی اور پھر programer اس ریزن کو چیک کر کے دیکھ سکتا ہے کہ اس نے initialization کرنی ہے یا اس نے garbage collection کرنی ہے جو بھی operation perform کرنا ہے وہ اس ریزن کو دیکھ کے دیسائٹ کر سکتا ہے یہاں میں ایک اور ہمیں point سمجھنے کے ضرورت ہے کہ ایک اگر آپ dll use کریں تو وہ share دا ہے اس کو ایک حکت میں ایک process کئی processes اور کئی threads جویں اس کو use کریں گے تو dll کو کئی ساری calls جا رہیں کئی سارے process جویں اس dll کو اپن کرنے کی کوشش کر رہے ہیں جب بھی کوئی ایک process کو اپن کرنے کی کوشش کرتا ہے dll main call ہوتا تو dll main اگر اس کے لیے multiple requests آ رہنے ہیں multiple processes at a time dll کو اپن کرنے کی کوشش کر رہے ہیں تو وہ ساری requests جویں وہ serialize ہوتی ہیں یعنی کہ وہ concurrently execute نہیں ہوتی وہ ایک کسی schedule کے مطابق پہلے ایک request پوری ہوگی پھر دوسری request پوری ہوگی پھر تیسی request پوری ہوگی جب تک ایک request پوری نہیں ہو جاتی اگلی request جو ہے وہ pending رہے گی and so on تو اس کو کہتے ہیں serialization جتنے بھی dll processes dll main کو execute کرنے کی کوشش کر رہے ہیں وہ سارے requests جو بھیجنے ان کو operating system serialize کرے گا serial pattern کے اندر execute کرے گا serialization جو ہے وہ بڑی critical ہے اگر آپ serialization نہ allow کریں ان case of dll تو مختلف کسم کے conflicts ہا سکتے ہیں آپ کو unexpected results مل سکتے ہیں یہ چیز آپ نے operating system میں پڑی ہوگی جب آپ concurrent programming کے اندر دیکھتے ہیں کیا کس طرح کی problems آتی ہیں تو serialization اس وجہ سے بڑی critical ہے important ہے اس کو enforce کرنا windows کے لئے lasmium dll main کے اندر انیشلائیزیشن ہوتی ہے انیشل جو بھی operations ہم نے perform کرنے ہیں جو بھی data structures create کرنے ہیں جو handles وغیرہ آپ کو چاہیں ہیں ان handles کو initialize کیا جاتا ہے تو یا پھر اگر وہ detach ہونے کی صورت میں call ہی ہے تو ان کو آپ کو detach کرنا ہوتا ہے یہ initialize operation جو ان کے بیچ میں کسی کی طرح کی interruption جو ہے یہ نہیں ہونے چاہیے اگر interruption ہوگی تو اس سے unexpected result آئیں گے جس کی وجہ سے serialization enforce کی جاتی ہیں اور یہ آپ نے خیال رکھنا ہے کہ deal main کے اندر کسی کسی کسم کی blocking call نہیں ہونے چاہیے بلکن call کا مطلب ہے جو کہ indefinite period کے لئے block ہو جائے یعنی کہ ایک input output کا ویڈ کر رہی اور جب تک input output complete now وہ return نہ کریں ایسا کوئی function ہی call ہونا چاہیے تو indefinite blocking نہیں ہونے چاہیے ایسا function call کریں جو اس کے اندر اکھیں جو جلدی سے return کر جائے ہیں blocking functions now اور پھر deal main کے اندر very few exceptions کے اندر آپ ایسا کریں گے کہ کسی اور deal کو call کریں گے عام طور پہ deal main کے اندر ایسا نہیں کیا جائے گا پھر اس کے علاوہ deal main کے اندر load library اور load library ex جو ہے اس کو آپ نے کسی صورت نہیں call کرنا ایسا کریں گے تو اس طرح سے اور کئی سارے entry points کھول جاتے ہیں اور پھر وہی serialization جو ہے وہ enforce نہیں کیا جا سکتی اور پھر اگر آپ نے کوئی area ہے جہاں پہ part of the code ہے جہاں پہ آپ نے threads کی attaching اور detaching کو disable کرنا آپ کو پتا ہے کہ یہ code کرتکل ہے اور اس کرتکل code کے بیچ میں کوئی اور دوسی thread یا process جہاں وہ attach now تو اس کے لیے disable thread library call ہے اس function کو call کر کے آپ جو threads کی attaching یا detaching اس کو disable کر سکتے ہیں اور جب آپ نے واپس چاہتے ہیں کہ جی پھر سے attach اور detach ہو سکیں تو اس کو again آپ enable کر سکتے ہیں اس code کے execute ہونے کے بعد تو یہ few ایسی چیزیں ہیں جو کہ جب بھی آپ dll main کا function لکھیں اس کا آپ نے خیال رکھنا ہے serialization ہوتی ہے آپ نے blocking functions نہیں use کرنے ہیں آپ نے اور entry points نہیں کھولنے ہیں اور آپ نے جو thread اگر کوئی ایسا function ہے critical code ہے تو اس کو آپ نے thread کو detach attach detach disable کر کے ان اس code کو execute کرنا