رشتههای مختوم به تهی Null Terminated Strings در پاسکال شیگرا

رشتههای مختوم به نهی Null Terminated در پاسکال شیگرا
بر خلاف پاسکال شیگرا زبان های سی پلا پلاس و سی فاقد رشته ای واقعی هستند
در زبان های سی و سی پلاس پلاس رشته ها به صورت آرایه ای از کاراکترها پیاده سازی میشوند
که خاتمه آنها با مقدار Null (یک 0 در انتهای رشته ) مشخص میشود
آرایه های کاراکتری فاقد بایت طول رشته هستند
لذا برای علامت گذاری انتهای رشته های مختوم به تهی از Null استفاده میشود
با توجه به این که ویندوز با زیان سی نوشته شده است
لذا بسیاری از توابع ویندوز نیاز به پارامترهایی از نوع آرایه های کارکتری دارند
با توجه به این که نوع های رشته ای پاسکال با ارایه های کاراکتری هم خوانی نداشتند
لذا ضرورت ایجاد آرایه های کاراکتری به وجودآمد تا رشته های پاسکال بتوانند با توابع ویندوز کار کنند
به همین منظور نوع PChar به وجود آمد
شما میتوانید از نوع PChar به عنوان ارایه کاراکتری استفاده کنید
برای مثال تابع MessageBox ویندوز که از آن برای نمایش کادر پیغام استاندارد ویندوز استفاده میشود
دارای تعریف زیر است
function MessageBox (hWnd : HWND ; lPText , lpCaption : PChar ; uType : Uint) : Integer ;
همان طور که مشاهده میکنید
دومین و سومین پارامتر از نوع آرایه کاراکتری هستند
از دومین پارامتر برای تعیین متن پیغام و از سومین پارامتر برای تعیین Caption پیغام استفاده میشود
برای این که بتوانید از تابع در برنامه های دلفی استفاده کنید
چندین روش وجود دارد
روش اول
Var Text : String ; Caption : String ; begin Text := 'This Is a Test'; Caption := 'Test Message'; MessageBox(0, PChar (Text). PChar(Caption), 0); end;
در این روش از قابلیت تبدیل نوع استفاده شده و نوع رشته ای بلند به نوع رشته ای مختوم به تهی تبدلی شده است
روش دوم
Var Text : PChar ; begin Text := 'This Is a Test'; Message(0 , Text, 'Message'. 0); end;
در روش فوق از نوع PChar استفاده شده است
با توجه به این که قدرت نوع های رشته ای در دستکاری ان هاست
لذا معمولا از این روش استفاده نخواهید کرد و به جای آن از تبدیل نوع ( روش اول ) استفاده خواهید کرد
توجه داشته باشید که شما میتوانید از رشته های لغوی
( رشته ای از کاراکترها که درون دو علامت آپوستروف ‘ ‘ محصور شده اند ) برای ارسال پارامتر API ویندوز استفاده کنید
لذا عبارت زیر نیز صحیح است
MessageBox(0, 'This Is a Test', 'Message',0);
نکــــــــــــته |
---|
توجه داشته باشید که روش دوم به صورت عادی در برنامه net. قابل استفاده نخواهد بود زیرا نوع PChar در محیط NET. به عنوان یک نوه داده ای نا امن UnSafe شناخته میشود |
روش سوم
هم چنین شما میتوانید به جای PChar از آرایه ای استفاده کنید که عناصر آن از نوع Char باشند
Var Text :array[0..20] of char; begin Text := 'This is a Test'; MessageBox(0, Text, 'Message', 0); end;