 بسم اللہ الرحمن الرحیم، آج کے لیکچر کے اندر ہم Windows کے کچھ Windows پوکرائمیں کے کچھ پرنسپلز دسکس کرتے ہیں آپ کسی بھی پلاٹفوم کے اپر اگر Windows کی API's use کر رہے ہیں تو یہ پرنسپلز آپ کے لئے use ہو لہاں کوئی بھی پلاٹفوم ہو جیسے VB ہے C شارپ ہے Visual C++ ہے وہ ان پرنسپلز کو فالو کرے گی تو یہ پرنسپلز سمجھے بڑے سان ہے اور ان کو once آپ اندستان کرلتے ہیں تو آپ کے لئے programming point of use سیٹن چیزیں جو ہم بڑی کلیر ہو جاتی ہیں فسلی ہمیں یہ دیکھنا کہ Windows جو ہے وہ تمام رسورسز کو as object street کرتی ہے Windows operating system کہ جتنے بھی رسورسز ہیں ہر operating system کے رسورسز ہوتے ہیں operating system ان رسورسز کو مانج کر رہا ہوتا تو جن جن رسورسز کو Windows operating system مانج کر رہی ہے Windows ان کو کہہ رہی ہے objects اور پھر ان objects کے اوپر اپریشنز پرفارم کرنے کے لئے Windows کے پاس set of apis ہیں اگر کسی ایک سرطن objects کے اوپر آپ اپریشن پرفارم کرنا چاہتے ہیں تو آپ دیکھیں گے کہ اس object سے relevant کون کونسی apis available ہے دوسرا point ہے کہ جو windows api ہے وہ درکلی hardware کو access کرنے کیا آپ کو جاعت نہیں دیتی آپ نے کسی بھی چیز کے اوپر کسی بھی hardware کو اپریشن پرفارم کرنا تو آپ کو api کے تھروو ہو کرانا پڑھے گا direct access allow نہیں ہے کیونکہ windows جس طرح operating system میں آپ نے پڑا ہوگا کہ اکسر operating system protection provide کرتے ہیں تو windows بھی protection provide کرتے ہیں protection کا مطلب یہ ہے کہ کوئی process inadvertently کوئی hardware یا کوئی memory اس کو درکلی access نہ کریں ہار کام operating system کے ترو schedule ہو تو اگر کوئی program directly hardware کو access کرنے کی کوشش کرے گا تو windows اس طرح کی access وہ allow نہیں کرے گی exception generate کر دے گی اور پھر اگر آپ نے مختلف چیزوں کو حانل کرنے ہیں جیسے processes ہیں, threads ہیں pipes ہیں, memory ہیں device context ہے مختلف کسم کی resources available ہیں تو وہ سارے کسارے resources وہ as in object treat کیے جائیں گے جب آپ کو اس resource کی ضرورت ہوگی آپ اس کا relevant object create کریں گے اور پھر اس object ser relevant associated آپ API's کو call کریں گے اس کے پر مختلف operations perform کرنے کے لئے اور پھر آپ کے پاس اگر ایک کوئی object آپ choose کرتے ہیں جس کے پر آپ نے operation perform کرنا ہے تو اس کے لئے certain set of API's ہیں جو windows کی documentation ہے window API's کی documentation ہے آپ اس کے اندر وہ set of API's دیکھ سکتے ہیں اس کے اندر وہ listed ہیں اور بڑا easy لی ان کو آپ sort کر سکتے ہیں کہ اس specific object کے لئے کنسی API's ہیں جو use ہوری ہیں اور جو آپ نے operation perform کرنے ہار operations associated آپ کو کوئی نہ کوئی API's رور مل جاتی ہے جو API's ہوتی ہیں وہ دیکھنے میں تھوڑی سی cryptic لگتی ہیں کیونکہ اس کے اندر عام طور پہ a long list of parameters ہوتی ہیں لیکن اس سے گفرانے کی کوئی ہوتی نہیں ہے جتنے بھی اس کے اندر long list of parameters ہو جو most common operations وہ آپ تھوڑے سے parameters use کر کے یا تھوڑے سے parameters specify کر کے perform کر سکتے ہیں most of the parameters most of the cases کے اندر nul رکھے جاتے ہیں تو آپ کو یاد رکھنے کی اور سارے پیرامیٹرز کو in-depth دیکھنے کی آپ کو زوت نہیں پڑتی اکثر جو most common operations وہ تھوڑے سے parameters specifically specify کرنے سے آپ operations perform کر سکتے ہیں پھر کیونکہ windows آپ کو پتا ہے ملٹی tasking سسٹم ہے ملٹی threading سسٹم ہے ایک وقت میں number of processes run ایک process کے اندر number of threads run تو in processes کو عام طور پر synchronize کرنے کی ضرورت پڑتی ہے ان کے بیچ میں resources کو arbitrate کرنے کی ضرورت پڑتی ہے تو ایسے سارے operations perform کرنے کیلئے number of synchronization کے constructs وہ available ہیں windows کے اندر جس طرح آپ لے operating system میں پڑھوں گے جیسے semaphores ہوتی ہیں اور دوسرے constructs ہوتے ہیں تو کسم کے constructs windows کے available ہیں اور اپنی need کے according لی آپ ان constructs کو use بھی کر سکتے ہیں اور basic unit of execution windows کے اندر وہ thread ہے یعنی کہ ایک process ہے اور اس process کے اندر کیونکہ multi threading ہے تو number of threads run تو thread سے چھوٹا کوئی unit نہیں ہے thread جو ہے وہ most basic unit ہے جس کو کہ windows recognize کرتی ہے اس کے لیوہ جو API اس کے نام ہے وہ کافی descriptive ہوتے ہیں descriptive اس لیے ہوتے ہیں کیونکہ thousands of apis میں بھی exist کرتی ہیں ساری آپ یاد نہیں رکھ سکتے ہیں اگر وہ descriptive نام ہوتے پھر آپ کے زین میں شہد اس کا image رہا جاتا ہے اور آپ کو ان کو use کرنے میں اسانی ہوتی ہے جس طرح ان examples کے اندر بھی دیکھ سکتے ہیں جس طرح ایک بڑا سنام ہے wait for single object wait for single object یہ ایک بڑا سنام ہے اور اس descriptive نام ہونے کی وجہ سے یہ آپ کو یاد بھی رہا جاتا ہے اور جب زود پڑے اس کی تو آپ اس کو use کر سکتے ہیں نمبر ناموں سے بھی یہاں اتنی گبرانے کی ضرورت نہیں ہے جو windows ہے ایک تو ہم نے دوسرے compilers کے اندر آپ نے پہلے کام کیا ہوگا اس کے اندر ایک set of primitive data types ہوتی ہے جس طرح int ہے float ہے windows جو ہے اس کے اندر اپنی آنگی بھی ایک دیتیٹائپ سوالے بلائیں کئی کیسوں کے دیتا سٹرٹیرز ہیں اور ان سٹرٹررز کی مختلف کیسوں کے دیتا عام طور پہ جتنی بھی دیتیٹائپس ہوں گی وہ اپر کس کی اندر دیفائنے ہیں جس طرح اس اجامل کے اندر آپ دیکھ سکتے ہیں bull another بالکال ایک اپر کس کی اندر دیفائنے ہیں سارے اس کے اندر بی او او ال یہ سارے اپر کس کے اندر ایک رسورس کا حنڈل سٹور کرنے کے لئے یہ ایک دیتاٹائپ ہے تو اس کے بھی جو دیتاٹائپ کے سارے کریکٹرز ہیں یہ اپرکیسز ہیں جتنے بھی دیتاٹائپ سنگی وہ اپرکیسز کے اندر ڈیفائنڈ ہے اور یہ کہاں پر ڈیفائنڈ ہے یہ ایک فائل بنی ہوئی ہے هیڈر فائل windows.h ہر بگرام کے اندر آپ کو اس کی ضرورت پڑے گی جب بھی آپ نے ان ڈیتاٹائپس کو use کرنے آپ windows.h کو ضرور انکلوٹ کریں گے تو windows.h کے اندر ان ساروں کی ڈیفائنڈیشن ہے اس کے لوہا کئی جگہوں پہ ہمیں ڈیٹرز کی بھی ضرورت پڑتی ہے اگر ہم ڈیٹرز کی اندر آپ کو use کرتے ہیں تو ہمراہر پاس ڈیٹرز اپریٹرز ہوتا ہے اسٹارک اسٹارک کو ہم use کرتے ہیں as ڈیٹرز اپریٹرز لیکن ڈیٹرز کی ڈیٹرز ہیں windows ڈیٹرز کے ڈیٹرز ڈیٹرز ہیں وہ اس چیز کو avoid کرتی ہیں وہ جو ہمارا ڈیٹرز اپریٹرز ہے جو ڈیٹرز اپریٹرز پوانٹر اپریٹر ہے اس کا use نہیں کرتے ہیں بلکہ وہ دیتی تیپس ڈیفائن ہوئی مہنی ہے وہ ڈیفائن ایسی طریقہ سے ہوئی مہنی ہے کہ آپ کے پاس جو ڈیٹی تیپس ہوں وہاں پہ آپ کو کبھی پوانٹر استعمال کرنے کی ضرورت نہ پڑھے پوانٹر کا اپریٹر استعمال کرنے کی ضرورت نہ پڑھے For example جیسے ایک ڈیٹی تیپ ہے t4 t4 کا اگر آپ نے پوانٹر دفائن کرنے ہیں تو وہ ڈیفائن ہوگا ہے as t4 ڈیٹی تیپس ڈیٹیر لیکن آپ کو t4 ڈیٹی تیپ کے بھی use کرنے کی ضرورت نہیں ہوگے t4 ڈیٹی تیپ اس کی جو ڈیٹی پہ یہ already ڈیفائن ہے اور وہ ڈیٹی تیپ اس ڈیٹی ڈیٹیر lp is long pointer for t string. lp long pointer for t string یہ ایک type already windows.h کے اندر ڈیفائن ہوئی ہے تو اگر آپ نے t4 ڈیفائن کی ایک string ڈیفائن کرنی ہے تو آپ کو اس کے لیے t4 ڈیفائن نہیں دےنا بڑے گا آپ ڈیفائن گے lp tstr اس کے لیوہا یہ کچھ پوکرائمنگ پریکٹس ابھی تو ہم نے API اس کی بات کی اس کے لیوہا سرٹن کچھ پوکرائمنگ پریکٹس ہیں جو کہ آپ کو windows پریکرائمنگ اندر عام طور پہ نظر آتی ہیں جو موست کمونلی use پریکرائمنگ پریکٹس ہے وہ ہنگیرین نوٹیشن ہے ہنگیرین نوٹیشن جو ہے اس کا سنٹیکس سے کوئی تعلق نہیں ہے اس کا read ability کے ساتھ تعلق ہے جو بھی آپ ایک ویریبل نیم دفائن کرتے ہیں عام طور پہ اس کے شروع میں کچھ lower case prefix دفائن کرتے ہیں وہ لوگ کے lower case prefix جو ہے وہ یہ بتاتی ہے کہ اس دیتا طاپ کی طاپ کیا ہے پر ایک سامپل کے اندر ایک ہمارے پس ویریبل ہے lpsz file name اسل میں تو وہ file name ہے آپ کو اگر اس ویریبل کا نام رکھنا تھا تو شاید file name رکھنا چاہیے تھا یہ lpsz کیا یہ ہنگیرین نوٹیشن کیا اس کی prefix آپ نے رکھی ہے اس کا سنٹیکس سے کوئی تعلق نہیں ہے اگر آپ صرف file name بھی رکھ دیں تو بھی صحیح سنٹیکس کے مطابق لیکن lpsz آپ نے read ability بیتر کرنے کے لیے رکھی ہے lpsz سے آپ کو یہ پتہ چل رہا ہے کہ file name کی کیا ہے lp is for long pointer s is for strength اور z ہمیں یہ بتا رہا ہے کہ strength null terminate ہے 0 سے terminate ہو رہی ہے اسی طرح سے اگر کوئی ڈیجر ویریبل اگر آپ نے کو define کیا تو شروع میں اس کے آپ آئی لگا دیں گے آئی سے پتہ چلے گا کہ یہ ڈیجر ویریبل ہے تو اسی طرح مختلف جگہوں پر آپ دیکھیں گے کہ جو بھی ویریبل name define کیا گا اس کے شروع میں کچھ ایک prefix ہوگی ڈیگرین ڈیجر مطابق جس prefix ہو دیکھ کے آپ کو اس کی ڈائیب پتہ لگیا تی آپ کو اوپر جاکے کہیں ڈیکلریشن میں دیکھنے کی ضرورت نہیں پڑھتی بار بار کہ اس کی ڈائیب کیا define ہوئی بھی ہے اور windows.h کیا گئیں یہاں پہ بات ہو رہی ہے windows.h جو ہے وہ ہماری ہیڈر فائل ہے جس کے اندے کے ساری جو API اس کے proto ڈائیبس ہیں اس کے اندہ سارے ہمارے ڈائیبس ہیں جتنی بھی آپ کو proto ڈائیبس اور definition کی ضرورت پڑھتی ہے ڈیرنگ windows programming windows کی API اس کو call کرنے کے لیے وہ سارے proto ڈائیبس جو ہے windows.h کے اندر اوپر ہے تو اگر ہم لے windows کی کوئی API ڈائیبس کرنی ہے تو آپ کو اپنے program کے اندر شروع میں windows.h کو include کرنا پڑھے گا