آموزش پاسکال شی‌گرا

رشته‌های مختوم به تهی 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;

 

[adinserter block="1"]
4/5 - (4 امتیاز)

نوشته های مشابه

دیدگاهتان را بنویسید

دکمه بازگشت به بالا