Yusefnejad

یوسف نژاد

Yusefnejad

یوسف نژاد

تو مطالبی که تا الان تو این سری آورده شده (1 و 2 و 3 و 4 و 5 و 6 و 7 و 8) سعی شده تا CLR و برخی مفاهیم و بخشهای مهم مرتبط با اون شناسونده بشه. تو قسمت پایانی این سری درباره ارتباط با کدهای مدیریت نشده تو CLR و اجرای اونا بحث میشه.

توسعه اپلیکینشها تو بستر دات نت مزایای بسیار زیادی به همراه داره. اما شرکتهای کمی تو دنیا حاضرن سرمایه گذاری لازم رو برای طراحی و پیاده سازی دوباره محصولات یا کتابخونه هاشون تو دات نت رو انجام بدن و ریسکشو بپذیرن. مایکروسافت با علم به این حقیقت، CLR رو طوری طراحی کرده تا بسترهای کافی و مناسب برای ارتباط و اجرای کدهای مدیریت نشده برای برنامه نویسا فراهم بشه. درواقع در پلتفرم دات نت مکانیزمهای خاصی برای تولید اپلیکینشهایی که حاوی هر دو کد مدیریت شده و مدیریت نشده هستن موجوده. در CLR سه روش یا سناریو برای رسیدن به این هدف که به اصطلاح به اون interoperability هم میگن، موجوده:


- اجرای فانکشنهای کد مدیریت نشده تو یه DLL توسط کد مدیریت شده:  کدهای مدیریت شده میتونن با استفاده از سازوکاری به نام P/Invoke (که مخفف عبارت Platform Invoke هست) متدهای موجود تو DLLهای مدیریت نشده رو فراخوانی کنن. درحقیقت بسیاری از انواع تعریف شده تو FCL هم درنهایت با استفاده از این امکان، متدهای موجود تو کتابخونه هایی چون kernel32.dll و یا user32.dll رو فراخوانی میکنن. بسیاری از زبانهای برنامه نویسی پلتفرم دات نت امکاناتی برای فراخوانی هرچه راحتتر این متدها تو کدهای مدیریت شده فراهم میکنن. 

برای فراخوانی این متدها باید از دو موضوع اصلی آگاه بود. اول DLLای که متد مربوطه توش تعریف و پیاده سازی شده، و دوم ساختار و به اصطلاح امضای متد. برای استفاده از این متدها ابتدا باید متد مربوطه به برنامه معرفی بشه. برای اینکار تو #C باید به صورت زیر عمل کرد:

1- تعریف متدی با استفاده از کلمه های کلیدی static و extern که امضایی دقیقا مشابه امضای متد مدیریت نشده موردنظر داره.

2- افزودن خاصیت DllImport به این متد و معرفی dll مربوطه.

مثلا برای فراخوانی متد MessageBeep از کتابخونه User32.dll باید به صورت زیر عمل کرد:

[DllImport("User32.dll")]
static extern Boolean MessageBeep(UInt32 beepType);

حالا میشه مثلا با استفاده از کد زیر از این متد تو کد مدیریت شده استفاده کرد:

MessageBeep(0);

البته گزینه ها و امکانات بیشتری هم تو استفاده از این روش در اختیار برنامه نویس قرار داره. برای آشنایی بیشتر با این مبحث: ! و !.


- استفاده از کمپوننتهای COM موجود تو کد مدیریت شده: بسیاری از شرکتها کتابخونه ها و کمپوننتهای زیادی رو با تکنولوژی COM و با استفاده از کدهای مدیریت نشده تولید کردن. با استفاده از این کمپوننتها، اپلیکیشنهای دات نتی میتونن مزایای زیادی بدست بیارن. تو پلتفرم دات نت با استفاده از مکانیزمی خاص میشه اسمبلی هایی تولید کرد کرد که این کمپوننتهای COM رو بصورت کامل توصیف میکنه، بدون اینکه نیازی به پیاده سازی دوباره کدهای اصلی داشته باشه. درواقع این اسمبلی ها نقش رابط یا اینترفیسی بین این دو محیط مجزا و متفاوت از هم رو ایفا میکنن. تو این اسمبلی های خاص، نوع های موجود تو کمپوننت COM تعریف میشن و سایر کدهای مدیریت شده میتونن با استفاده از این داده ها عملا به امکانات این نوع ها دسترسی پیدا کنن.

برای تولید این اسمبلی های خاص میشه از ابزار TlbImp.exe (که نامش مخفف عبارت Type Library Importer هست) استفاده کرد که به همراه ویژوال استودیو نصب میشه. برای اجرای اون هم میشه از خط فرمان توسعه ویژوال استودیو استفاده کرد (اطلاعات بیشتر).

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

تو این قسمت تمامی dllهای COM که تو سیستم رجیستر شدن نمایش داده میشن. برای رجیستر کردن یه کتابخونه COM جدید هم میشه از ابزار Regsvr32.exe استفاده کرد.

پس از انتخاب کتابخونه موردنظر و افزودن ریفرنس اون، ویژوال استودیو بلافاصله یه اسمبلی با پیشوند .Interop برای استفاده به عنوان رابط تولید میکنه و به ریفرنسهای پروژه اضافه میکنه. مثلا در تصویر زیر ریفرنسی از کتابخونه Microsoft DirectX Transforms Core Type Library به پروژه اضافه شده. اسمبلی تولید شده تو تصویر زیر نشون داده شده:

این اسمبلی خاص تولیدشده، تو فولدر obj در مسیر ریشه پروژه قرار داده میشه. برای مثال بالا محتوای این فولدر به صورت زیر خواهد بود:

همونطور که مشاهده میشه، فایل این اسمبلی رابط هم با اطلاعات مناسبی توسط ویژوال استودیو تولید میشه.

اطلاعات بیشتر و کاملتر تو زمینه کار با اشیای COM تو پلتفرم دات نت: ! و ! و !.


- استفاده از کدهای مدیریت شده تو کدهای مدیریت نشده: بسیاری از کدهای مدیریت نشده موجود نیاز به استفاده از کمپوننتهای COM برای درست کار کردن دارن. پیاده سازی این کمپوننتها با استفاده از کدهای مدیریت شده بدلیل فراهم شدن بسیاری از قسمت ها توسط خود پلتفرم، خیلی راحتتره. برای تولید چنین کامپوننتهایی میشه از ابزارهای TlbExp.exe (یا Type Library Exporter) و RegAsm.exe (یا Assembly Registration Tool) که به همراه ویژوال استودیو نصب میشن، استفاده کرد (اطلاعات بیشتر).


نکته: مایکروسافت ابزارهای کار با کدهای مدیریت نشده رو به صورت open source تو سایت codeplex.com تو آدرس http://clrinterop.codeplex.com قرار دارده.


با ورود windows 8 به بازار، مایکروسافت apiهای جدید ویندوز با نام Windows Runtime (یا WinRT) رو معرفی کرد. این apiها با استفاده از COM پیاده شدن، اما به جای استفاده از فایلهای type library، از متادیتایی استاندارد که توسط تیم دات نت تولید شده استفاده میکنن. با استفاده از این ویژگی، کدهای مدیریت شده میتونن براحتی از این apiها استفاده کنن. در لایه های زیرین، کار برقراری ارتباط بین کدهای مدیریت شده و کدهای مدیریت نشده توسط CLR بصورت خودکار انجام میشه.

لیست این apiهای جدید رو میشه اینجا مشاهده کرد.


.: پایان.

CLR به زبان ساده - قسمت اول: پیشگفتار
CLR به زبان ساده - قسمت دوم: اسمبلی
CLR به زبان ساده - قسمت سوم: بارگذاری
CLR به زبان ساده - قسمت چهارم: اجرا
CLR به زبان ساده - قسمت پنجم: IL و بررسی کد 
CLR به زبان ساده - قسمت ششم: NGen.exe
CLR به زبان ساده - قسمت هفتم: FCL و CTS
CLR به زبان ساده - قسمت هشتم: CLS
CLR به زبان ساده - قسمت نهم: کد مدیریت نشده

:.

  • یوسف نژاد

Unmanaged

NET Framework.

CLR

نظرات  (۱)

سلام
از اینکه مطالب مفید قرار میدهید سپاسگزارم.

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی
آخرین نظرات