+com چیست؟

COM ابزاری است که قابلیتهای برنامه های  موجد تحت محیطهای ویندوز را افزایش می دهد.اجزاء COM را با زبانهای مختلفی میتوان نوشت که دلفی یکی از قویترین آنهاست. COM سرنام Component Object Model است ، یعنی مجموعه مشخصاتی که میکروسافت برای ساختن اجزاء نرم افزارهایی مطرح کرده که می توان در برنامه ها گنجاند وقابلیت برنامه های موجود تحت محیطهای پنجره را افزایش داد. اجزای COM را با زبانهای مختلفی می توان نوشت. COM پایه و شالوده مجموعه مشخصات OLE  (گنجاندن و مرتبط کردن شیءها) DirectX,ActiveX است. COM+ نیز چیزی منفک از COM نیست ، تنها امکانات و قدرت آن ارتقا پیدا کرده است.اگر با Microsoft Transcation و قابلیتهای آنها آشنایی دارید ، باید گفت که COM+ قابلیتهای متناظر با دو ابزار فوق و COM را داراست و آنچه که در اینجا اهمیت دارد پشتیبانی دلفی از این ابزار است.

COM دارای چه قابلیتهایی است؟

COM اصلی ترین پایه تکنولوژی هایی است که به اجزاء نرم افزاری امکان می دهند. تا بدون توجه به زبانی که با آن ایجاد شده اند ، با یکدیگر ارتباط برقرار سازند.دو قابلیت مهم

COM که امروزه بیش از 150 میلیون کاربر عبارت است از :

·        COM مدلی مستقل از زبانهای  برنامه سازی است ونحوه بکار گیری آن وابستگی به زبانی خواص ندارد.

·        تمامی ابزارها و نرم افزارهای کاربردی تحت ویندوز از COM پشتیبانی می کنند.

در اینجا با دسته بندیهای COM تحت سه عنوان مدیریت اجزاء سازنده ، سرویس ها و Runtime به توضیح پرداخت.

سرویس ها

سرویس های COM+ ترکیبی از سرویس های MSMQ,MTS می باشند ، چنانکه برخی از کارشناسان بر این باورند که MSMQ,MTS در ارتقا سرویس های COM+ موثر بودند.مدیریت تراکنش ها مهمترین بخش این سرویس ها بوده که در ادامه به تشریح آنها خواهیم پرداخت.

تراکنش ها

از آنجا که COM+ بر مبنای طراحی شیء گرا استوار است و محیط های شیء گرا نیازمند سیستمی هستند که پردازش تراکنش ها را به محض دریافت آنها دهد، لذا مدیریت تراکنش ها یکی از ضروری ترین سرویس های COM+ به شمار می آید.

به طور مثال هنگامی که یک برنامه کاربردی تحت ویندوز مانند سفارش یک مشتری ، در حال پردازش داده ها می باشد ، به لحاظ ارتباط تنگاتنگ آن را با محیط های شیء گرا وهمچنین بانک های اطلاعاتی، لازم است تا عملیات پردازش تراکنش ها نیز به درستی انجام پذیرد ، به طوری که تراکنش ها بلافاصله پس از دریافت توسط سیستم اجرا شوند.کنترل تراکنش ها در COM+ به وسیله Distributed Transaction Coordinator (DTC) انجام میگیرد.در روش مدیریت تراکنش ها به وسیله DTC ، پردازش تراکنش ها بین یک یا چند سیستم به اشتراک گذاشته خواهد شد.

امنیت

برنامه های کاربردی ، بخصوص برنامه های سرویس دهنده /سرویس گیرنده ، در بر گیرنده حجم وسیعی از اطلاعات می باشند ، بدین ترتیب کنترل شدید بر صلاحیت و چگونگی کار کاربران آنها امری حیاطی است.

مفهوم امنیت در برنامه های کاربردی امروزی که توسط ابزارها و زبان های برنامه نویسی شیء گرا  طراحی می گردند ، مفهومی گسترده تر از کنترل عملیات کاربران داراست. مدیریت عناصر ، اجزا سازنده وکنترل انتقال داده ها در این سیستم ها وهمچنین کنترل انتقال داده ها بین عناصر یک برنامه مقوله هایی است که به امنیت سیستم مربوط       می شود.

ساختار امنیتی Role_Based

در ساختار امنیتی COM+ از روش Role_Based استفاده گردیده است.در این روش تمامی عناصر و گروههای کاری تحت عنوان Roles معرفی شده و در کنار روش امنیتی System_Based (این روش در همه سیستم های عامل پیاده سازی شده است) ،  امنیت برنامه های کاربردی را تضمین می نمایند.

اما Roles به خودی خود تولید نمی شود. برای ایجاد Roles می بایست ابزار Component Services administration دلفی را به کار گرفت.در سمت چپ منوی Component Services ، یک لیست درختی از عناصر موجود در آن نمایش داده خواهد شد.اکنون با انتخاب گره Roles از این منو قادرید users را به آن اضافه نمائید (برای انجام این کار دکمه سمت راست ماوس را بر روی  Roles بفشارید).

سه نوع Roles به نامهای Normal , Junior , Hero برای COM+ تعریف شده است. هر کدام از این عناوین گروههای کاری متفاوتی را برای کاربران مشخص می سازند.

توجه داشته باشید که کنترل اصلی امنیت توسط سیستم عامل انجام و COM+ به عنوان جزئی از سیستم عامل مطرح است.

پیکر بندی Role_Based علاوه بر امنیت برنامه ها ، قابلیت پیاده سازی و برقراری امنیت در سطوح اجزاء سازنده ، Interface و حتی متدها را نیز داراست.

اولین گام در پیاده سازی امنیت در COM+ ارزیابی خود برنامه است.این کار با فراخوانی ابزار Component Services administration وانتخاب تب Security امکان پذیر است.

ابتدا گزینه Enforce Access Checks For This Application را فعال نمائید.همانطور که در شکل می بینید ، قسمتی از کادر نمایش داده شده مربوط به تعیین سطوح امنیتی است. یکی از این سطوح امنیتی فقط مربوط به فرآیندها (Process) و دیگری مربوط به عناصر سازنده و فرآیندها است

چنانکچه تمایل دارید که برنامه COM شما تنها برای گروهی از کاربران قابل استفاده باشد وامنیت را تنها در همین سطح برقرار سازید.

برنامه های Multitier

چنانچه یک برنامه کاربردی Multitier طراحی کرده اید و قصد دارید تکنیک های امنیتی COM+ را بر سیستم Multitier ترکیبی از سیستم های سرویس گیرنده ، برنامه های کاربردی سرویس دهنده و بانک اطلاعاتی است. از آنجا که این سیستم ها با حجم وسیعی از داده ها روبرو هستند ، لذا پیاده سازی روش های امنیتی در آنها به سادگی امکان پذیر نبوده وهمواره می بایست بهبود کارآیی سیستم را مدنظر قرار دهید.

مفهوم (JIT) Just_In_Time واژه ای برای توصیف کامپایلری است که برنامه های شبکه نظیر Java را بسیار ترجمه می کنند ، اما در COM+ به مفهوم ایجاد و تخریب یک برنامه بدون توجه به ساختار آن برنامه است. آنهایی که که تکنیک های برنامه نویسی شیء گرا بیشتر آشنایی  دارند ، از این قابلیت COM+ به عنوان یک فرصت طلایی برای طراحی بهتر برنامه های کارربدی بهره خاص خواهند گرفت. متدهای SetComplete ,SetAbort  از کلاس ObjectContext ومتد SetDeactivateOnReturn کلاس IContextState جهت این امر کاربرد دارند.

جزا سازنده صف بندی شده

دلفی 3 با معرفی ابزار جدیدی تحت عنوان MIDAS هیجان خاصی را در دل برنامه نویسان برنگیخت. MIDAS مجموعه ای از اجزا سازنده بود که  آماده سازی برنامه های کارربدی سرویس گیرنده/سرویس دهنده Multitier را آسان می نمود. به خاطر داشته باشید که منظور از برنامه کاربردی سرویس گیرنده ، برنامه ای است که کاربران با استفاده از یک رابط گرافیکی با آن برقرار می کنند.

برنامه کاربردی سرویس دهنده نیز برنامه ای است که خدماتی را برای برنامه کاربردی سرویس گیرنده فراهم می کنند.عنوان سرویس دهنده/سرویس گیرنده به معنی وجود یک رابط گرافیکی و یک سرویس دهنده بانک اطلاعاتی است.

بعد از آن ، نسخه های جدی دلفی با ابزارهای متنوع تری به بازار متنوع تری به بازار عرضه گردیدند.امروزه دلفی 7 با پشتیبانی از تکنولوژی هایی نظیر COBRA,MTS, COM+ به عنوان یکی از قدرتمندترین ابزارهای برنامه نویسی مطرح ومورد استفاده جمع کثیری از خبرگان این امر می باشد.

چرا از اجزاء سازنده صف بندی شده استفاده می کنیم؟

قبل از این که نحوه پیاده سازی این اجزاء را شرح دهیم ، لازم است تا برخی از مزایای به کارگیری آنها را بر شماریم.

·        بهبود بهره وری سیستم ها: در سیستما هایی که از اجزاء سازنده صف بندی شده استفاده نمی کنند ، پاسخدهی به درخواستها تنها همزمان با ارسال آنها انجام می شود. در این صورت چنانچه همزمان با یک درخواست ، درخواست های دیگری ارسال گردد ، هیچ پاسخی به آنها داده نشده،  یک چرخه انتظار نامحدود بوجود می آید.اما دراجزاء سازنده صف بندی شده با قرار دادن درخواست ها  در یک صف ، به محض اتمام یک درخواست ، درخواستهای بعد یوارد شده و به آنها پاسخ داده می شود

·        مدل Briefcase :در اجزای سازنده صف بندی شده امکان فعالیت مجزای سرویس گیرنده می تواند به طور مستقل عملیات خود را انجام داده و پس از رفع عیب با سرویس دهنده ارتباط برقرار نماید.

·        مدیریت بحران: چنانچه قصد دارید یک برنامه سرویس دهنده با تضمین امنیت بالا (همانند یک برنامه تجارتی) پیاده سازی کنید ، ویژگیهای منحصر به فرد اجزای سازنده صف بندی شده کمک شایانی به ارتقاء سطح امنیت برنامه تان می کند.

·        زمان بندی در بارگذاری برنامه ها: مزیت دیگر اجزاء سازنده صف بندی شده استفاده از تکنیک زمان بندی در بارگذاری برنامه هاست.این بدین معنی است که یک مدیریت زمان بند برای پاسخ دهی به فرآیندها در اجزا سازنده صف بندی شده وجود دارد.

پیاده سازی یک شیء از نوع صف بندی شده ، TestImp.pas

Unit testImpl;

interface

uses

Windows,ComObj,ActiveX,Srv_TLB, StdVcl;

type

          TQTest=class (TAutoObject,IQTest)

          Protected

                   procedure SendText (const Value: WideString; Time: TDateTime)

end;

implementation

uses ComServ, SysUtils

procedure TQTest.SendText(const Value: WideString; Time: TDateTime)

const

SFileName= ‘c:\queue.txt’

SEntryFormat = Send time: %S ‘#13#10 Write time: %S #13#10 + ‘Message: %S ‘#13#10#13#10;

var

F :THandle;

WriteStr:      string;

begin

F := CreateFile (SFileName, Generic Write, FILE_SHARE_READ, nil , OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);

if F = INVALID_HANDLE_VALUE then RaiseLastWin32Error;

try

FileSeek (F,0,2);//go to EOF

WriteStr :=Format(SEntryFormat, [DateTimeToStr (Time)DateTimeToStr(Now), Value]);

FileWrite(F , WriteStr[1],Length(WriteStr));

finally

CloseHandle(F);

end;

end;

initialization

TAutoObjectFactory.Create(ComServer, TQTest,Class_QTest,ciMultiInstance, tmApartment);

end.

روش Pooling

هدف کلی از طراحی Pooling  مانند JIT ، افزایش بهره وری سیستم و ارتقاء کارایی برنامه هاست. در این روش ، اشیایی که دارای ویژگیهای تقریباً مشابه می باشند ، در یک منبع نگهداری می شوند.

COM+ از Pooling پشتیبانی میکند اما این پشتیبانی با محدودذیتهایی روبروست که در زیر به آنها اشاره می کنیم:

·        تمامی اشیا از نوع Stateless باشند.

·        اشیاء هیچگونه وابستگی با Tread ها نداشته باشند.

·        تمامی اشیاء حالت پیوسته داشته باشند.

·        عملیات مدیریت منابع و یا ثبت ومقدار دهی اشیاء به صورت خودکار انجام نگیرد.

·        قابلیت پیاده سازی کلاس IObjectControl وجود داشته باشد.

رویدادها

یک رویداد ، عملی است که مسبب آن یک کاربر است ویک برنامه  ممکن است به آن پاسخ دهد.به عنوان مثال فشرده شده کلیدها ، برگزیدن دکمه ها با ماوس ویا حرکت دادن ماوس. آنچه که در محیط دلفی برای مدیریت رویدادهای یک برنامه کارربدی اتفاق می افتد ، تفاوت آشکاری با مدیریت رویدادها در برنامه ها COM+ دارد. COM+ ازشیوه جدیدی برای مدیریت رویدادها استفاده می کند.

بحث خود را با بررسی دقیق تر ارتباط بین سیستم های سرویس دهنده و سرویس دهنده و سرویس گیرنده ادامه می دهیم. یک سیستم سرویس گیرنده ، درخواستی را برای استفاده از یک متد  به سیستم سرویس دهنده ارسال می دارد. اگر همه چیز به درستی انجام پذیرد ، دستگاه سرویس دهنده به تقاضای ارسالی پاسخ گفته و قاعدتاً مقداری داده برای آن ارسال می کند. به جرات می توان گفت که 90% سیستم های سرویس دهنده/سرویس گیرنده مبتنی بر COM به همین منوال کار می کنند.

پیاده سازی این کار بسیار ساده بوده ولی بدون شک مشکلاتی را به دنبال دارد. با استفاده از این روش همواره چرخه ای ا ز رویدادها د رسیستم وجود خواهد داشت که ممکن است تا مدت زمانی هیچ پاسخی به آنها داده نشود. این مسئله باعث بروز ترافیک در شبکه شده و کارایی سیستم را تا حد قابل ملاحظه ای کاهش می دهد.

اما COM راه حل ساخت یافته و موثری برای این مشکل ارائه کرده است .در این روش با کنترل انتقال اطلاعات بین سرویس دهنده وسرویس گیرنده از بروز ترافیک کاری جلوگیری به عمل می آید.این تکنیک TCE نام دارد. در این حالت یک ارتباط دو طرفه بین سیستم سرویس گیرنده و سرویس دهنده برقرار می شود.

توجه داشته باشید که سیستم های سرویس گیرنده می بایست هم زمان با هم و تحت شرایط مساوی شروع به کار نمایند ودر غیر این صورت امکان پیاده سازی TCE وجود نخواهد داشت.

در COM+ این روش کمی تغییر کرده است. COM+ از تکنیک دیگری به نام LCE برای مدیریت رویدادها استفاده می کند. در این روش ، سیستم سرویس دهنده به عنوان توزیع کننده رویدادها وسیستم سرویس گیرنده به عنوان متقاضی رویدادها معرفی       می شوند.

ایجاد یک Event Class Server

ActiveX Library Wizard ابزاری است که از آن برای ایجاد یک Event Class Server استفاده می شود.

ابتدا با فراخوانی ActiveX Library Wizard  ، یک COM Server DLL جدید ایجاد کنید. برای تولید Interface و کلاس های این برنامه از Automation Object Wizard  استفاده نمائید. شیء ساخته شده را EventObj بنامید.سپس متدی تحت عنوان MyEvent را در قسمت Interface مربوط به IEventObj وارد نمائید.

ثبت وپیکربندی Event Class Server

دوباره به ابزار Component Services administration نیاز پیدا کردیم. اکنون با این ابزار به خوبی آشنایی دارید ، چرا که تقریباً در طراحی تمام برنامه های COM+ از آن استفاده کرده اید.

unit pubMain;

interface

uses

          ComObj, ActiveX ,Publisher_TLB, StdVcl;

type

TEventObj = class(TAutoObject,IEventObj)

Protected

function MyEvent(const EventParam: WideString) :HResult; safecall;

end;

implementation

uses ComServ;

function TEventObj.MyEvent(const EventParam: WideString) :HResult;

begin

end;

initialization

TAutoObjectFactory.Create(ComServer,TEventObj), Class_EventObj ,ciMultiInstance,  tmApartment);

end.

طراحی و پیاده سازی برنامه های CORBA

CORBA سر نام عبارت Common Object Request Borker Architecture بوده و مجموعه مشخصاتی است که توسط Object Management Group (OMG) ابداع شده است و طی آن شیء های برنامه با شیء های برنامه دیگر ارتباط برقرار می کنند ، حتی اگر برنامه ها با زبانهای برنامه سازی مختلف نوشته شده باشند و در محیط های مختلف اجرا شوند.

برنامه ها درخواست خود را برای اشیا از طریق Object Management Group (OMG) ارائه میدهند و از این رو نیازی به دانستن ساختار برنامه ای که شیء ها  متعلق به آن هستند ، ندارند.CORBA برای کار با محیط های شیء گرا وافزایش قابلیت این گونه برنامه های کاربردی طراحی شده است. از طریق اینترنت می توانید به مثال های متنوعی از نحوه پیاده سازی برنامه های CORBA دسترسی داشته باشید.در این فصل قصد داریم طریقه طراحی وپیاده سازی چنین برنامه هایی را با کمک توابع کتابخانه ای و  ویزاردهای موجود در Delphi 7 تشریح نمائیم.

ویژگیهای CORBA

CORBA دارای چندین ویژگی است که کار با محیط های توزیع یافته و شیء گرا را آسان تر می نماید.

·        شی گرا بودن: CORBA مبتنی بر برنامه نویسی شیء گرا است.هر سرویس دهنده CORBA شامل یک Intarface می باشد که عملیات پشتیبانی از متدها و داده های برنامه را انجام می دهد.

·        موقعیت مکانی مستقل: قدرت واقعی CORBA در نحوه استقرار اشیاء است.هنگامی که یک سرویس گیرنده CORBA متقاضی یکم شیء از طرف سرویس دهنده می باشد، تنها چیزی که اهمیت ندارد نوع ومحل استقرار سرویس دهنده (و داده های موجود در آن) است. CORBA در حقیقت با ایجاد یک برنامه سرویس دهنده ، به درخواستهای ارسالی پاسخ می دهد.

·        مستقل از زبانهای برنامه سازی: ساختار CORBA مستقل از زبانهای برنامه سازی است. بدین معنی که حتی اگر با برنامه های مختلف پیاده سازی شده باشند باز هم امکان برقراری ارتباط آنها از طریق آن میسر است.

·        سیستم عامل/بستر سخت افزاری چندگانه: CORBA بر روی سیستم عامل های مختلف با بسترهای سخت افزاری مختلف پیاده سازی و نصب می گردد.این به معنی استقلال CORBA از بسسترهای سخت افزاری ، نرم افزاری است.

معماری CORBA

ORB  قسمتی است که در هر دو طرف سرویس دهنده وسرویس گیرنده وجود دارد. برنامه ها درخواست های خودئ را ا زطریق ORB ارسال می کنند لذا نیازی به دانستن ساختار برنامه ای که اشیاء متعلق به آن هستند ندارند. این کار توسط Internet Inter –ORB Protocol (IIOP)  که لایه ای از پروتکل TCP/IP است انجام می گیرد.

تشخیص مد بسترهای سخت افزاری و هماهنگی بین آنها با ORB است.در طرف سرویس گیرنده قسمتی تحت عنوان Stub وجود دارد. Stub فایلی است که به وسیله ابزارهای موجود در دلفی (تنها نسخه Enterpise دلفی) و به صورت خودکار تولید می شود. این فایل حاوی اطلاعاتی است که با معرفی Interface های لازم وتبدیل کدهای دلفی ، امکان برقراری ارتباط با ORB را فراهم می آورد. کامپایلرIDL2Pas در دلفی وظیفه انجام این کار را به عهده دارد.(مستندات مربوط به این کمپایلر در فهرست Delphi 7/Doc/ Corba از CD نصب دلفی 7 وجود دارد). فایل همچنین دربرگیرنده چندین کلاس است که از آنها جهت شبیه سازی سرویس دهنده استفاده می شود.

    Interface موجود در ORB در طرف سرویس دهنده تحت عنوان Basic Object Adapter (BOA) شناسایی می شود. وظیفه این Interface هدایت ومسیر یابی پیامها برای انتقال به بخش Skeleton  می باشد. دلفی با استفاده از ابزار دیگری تحت عنوانPortable Object Adapter (POA) به Interface های موجود در طرف سرویس دهنده ، انعطاف پذیری بیشتری ارائه کرده است. Skeleton نام کلاسی است که بوسیله کامپایلر IDL2Pas ساخته می شود وکلاس Skeleton  حاوی چندین کلاس دیگر است که وظیفه توضیع Interface های CORBA در طرف سرویس دهنده را به عهده دارند. هنگامی که به پیاده سازی یک برنامه CORBA در دلفی می پردازید ، متوجه می شوید که هیچ Interface ای  در کلاس Skeleton وجود ندارد (برای طرف سرویس دهنده).این جزئیات در فایل هایی با عنوان IMPL پیاده سازی شده اند.

OSAgent

همانطور که گفتیم CORBA مجموعه مشخصاتی است که اجازه می دهد شیء های یک برنامه با شیء های برنامه دیگر و بدون توجه به ساختار برنامه ها با هم  ارتباط برقرار سازند. برنامه ای که اجازه بین سرویس گیرنده و سرویس دهنده را ارائه می دهد به OSAgent معروف است. OSAgent ابزاری است که تنها بوسیله ORB بورلند ارائه شده است. OSAgent برنامه ای است که قبل از ایجاد یک برنامه CORBA به اجرا در می آید و به مثابه یک پل جهت ارتباط بین سرویس گیرنده وسرویس دهنده عمل می نماید.

Interface ها

هر یک از اشیاء CORBA یک Interface مربوط به خود دارد که بوسیله آن شناسایی وتعریف می شود.

برنامه سرویس دهنده ، توزیع متدها ، Interfaceها وداده ها را با ارسال درخواست از طرف سرویس گیرنده انجام می دهد. Interface ها تنها با یک بار توزیع در سیستم مقیم می شود. OMG برای توصیف وتعریف این Interface ها اقدام به ارائه زبانی تحت عنوان زبان تعریف Interface (IDL) نموده است. کد IDL چیزی مشابه با کدهای C و Java است.

زبان تعریف Interface

همانطور که قبلاً اشاره شد مستندات مر بوط به CORBA در فهرست Delphi6\DOC\CORBA از CD نصب دلفی وجود دارد.در این مستندات شرح توصیفی تمامی متدها ، انواع داده ای ، وراثت  ، Interface ها وهمچنین توضیحاتی در رابطه با IDL ارائه شده است.لذا پیشنهاد می کنیم برای دریافت اطلاعات بیشتر درزمینه های فوق به فهرست مذکور مراجعه داشته باشید.

در فایلهای IDL عمل حساسیت به حروف بزرگ یا کوچک اعمال شده است. به طور مثال تعریف یک Interface با نام FOO متفاوت با تعریف یک Interface تحت عنوان foo خواهد بود.

جملات توضیحی این فایل ها نیز به صورت زیر می باشد. (همانند C++ و Java).

// this is a single line comment.

/* this is an example of a block comment

that can be spread

over several line */

تمامی کلمات کلیدی IDL با حروف کوچکنوشته می شوند.توجه داشته باشید که تعریف یک فایل IDL تنها در فایل های IDL مجاز می باشد.این کار به وسیله اعلان              # nclude به همراه نام فابل IDL انجام می پذیرد.

انواع داده ها درIDL

IDL حاوی چندین نوع داده برای تعریف متغیرهاست.انواع این داده ها به همراه مقادیر متناظرشان در پاسکال شیء گرا در جدول 1-14 ارائه شده است.

داده های نوع دار

نوع داده ای Int در IDL تعریف شده است اما در صورت لزوم می توان از انواع دادهای short ، long، unsigned، short ،unsigne برای انجام این کار استفاده نمود.

نام های مستعار عناوینی است که از آنها جهت افزایش قابلیت فهم داده ها استفاده       می شود.یکناممستعار برچسبی برای شیء هایی چون فایل ها یا مجموعه ای از داده ها می باشند به مثال زیر توجه کنید:

typedef short yearType;

انواع داده ها در IDL

IDL Type

Pascal Type

boolean

Boolean

Char

Char

Wchar

Wchar

octet

Byte

string

AnsiString

wstring

WideString

short

SmallInt

unsigned short

Word

long

Integer

unsigned long

Cardinal

long long

Int64

unsigned longlong

Int64

float

Single

double

Double

long double

Extended

fixed

نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد