PDA

View Full Version : ترکیب برنامه نویسی Native با NET. بدون تغییر کل پروژه به CLR



Nima_NF
یک شنبه 26 آبان 1387, 01:01 صبح
کاربرانی که می خواهند برنامه native با MFC بنویسند و در کنار آن بتوانند از قابلیت های .NET و Windows Form استفاده کنند بدون اینکه کل پروژه به managed تغییر پیدا کنند، می توانند از مطالب این تاپیک استفاده کنند .
دقت کنید که کل پروژه شما و فایل اجرایی شما بدون تغییر به همان صورت Native باقی می ماند و توسط ILdisassembler قابل خواندن نمی باشد و فقط قسمت ها و پنجره هایی که خود را به Form های .NET متصل می کنند به CLR تبدیل و کامپایل می شوند.

این روش به این شکل است که ما از یک dll میانی که باید به صورت dynamic-linking باشد استفاده می کنیم و برنامه MFC خودمان را به Form ها و یا کنترل های .NET متصل می کنیم، دقت کنید که پروژه ما باید به چندین solution مختلف تقسیم شود تا از طریق properties هر solution بتوانیم تعیین کنیم که کدام یک بر اساس CLR کامپایل شود و کدام نه. سپس ما این dll ها را به صورت CLR کامپایل می کنیم.(علاوه بر خود Form های دات نت)، سایر قسمت های برنامه همچنان کیفیت Native خود را دارا خواهند بود. (برای یک نمونه پروژه MFC04 را دانلود کنید)


مایکروسافت برای این کار کلاس هایی مانند CWinFormsControl ، CWinFormsDialog ، CWinFormsView و توابعی مانند DDX_ManagedControl و ... در نظر گرفته است که این امکان را یا به اصلاح Integration را فراهم می کنند.

لینک اصلی MSDN که شما را به توضیحات قسمت های مختلف این کلاس ها هدایت می کند به شکل زیر است:
Using a Windows Form User Control in MFC (http://msdn.microsoft.com/en-us/library/ahdd1h97.aspx)

در لینک فوق در بخش In This Section سه مقاله آموزشی به لینک های زیر وجود دارد، که مرحله به مرحله نحوه ساخت یک پروژه ساده را توضیح می دهد (از پروژه MFC01 تا MFC03)، دقت کنید که به ترتیب هر کدام در بخش In This Section داخلی خود لینک های دیگری دارند که باید مطالعه کنید:
Hosting a Windows Form User Control in an MFC Dialog Box (http://msdn.microsoft.com/en-us/library/94t3ebxz.aspx)
Hosting a Windows Form User Control as an MFC View (http://msdn.microsoft.com/en-us/library/389zdaby.aspx)
Hosting a Windows Form User Control as an MFC Dialog Box (http://msdn.microsoft.com/en-us/library/676cbawx.aspx)

- حال برای اینکه به خوبی همه قسمت ها را متوجه شوید یا حتی اگر شروع نکرده اید و فقط می خواهید این امکان را بررسی کنید، مثال عالی و کامل MFC04 در لینک زیر را از سایت مایکروسافت دانلود کرده، سپس کامپایل و مطالعه کنید: (VC++2005 یا بالاتر)
MFC and WinForms Integration (http://www.microsoft.com/downloads/details.aspx?FamilyID=987021bc-e575-4fe3-baa9-15aa50b0f599&displaylang=en)

این برنامه از Dll ها به عنوان واسط استفاده می کند.
بعد ار اجرای برنامه فوق، از طریق گزینه New می توانید دیالوگ های مختلف را فراخوانی کنید، مثلا فقط یک کنترل دات نت در برنامه MFC به صورت یک static کنترل اضافه شود، یک Form کامل دات نت باز شود و ...

نمونه عکس:
http://i37.tinypic.com/9fy5u0.jpg

برخی نکات:
- شما برای استفاده از این امکانات باید هدر فایل afxwinforms.h را به برنامه اضافه کنید.
- این برنامه ها نیازمند انتشار mfcmifcXX.dll است مثلا mfcmifc80 برای vc8 .

به عنوان مثال شما با تعریف زیر در MFC این امکان را فراهم می کنید تا با کلیک یک button یک Form دات نت فراخوانی شود:



virtual void OnButton1( System::Object^ sender, System::EventArgs^ e );

BEGIN_DELEGATE_MAP( CHostForWinForm )
EVENT_DELEGATE_ENTRY( OnButton1, System::Object^, System::EventArgs^ );
END_DELEGATE_MAP()

------------

void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e )
{
System::Windows::Forms::MessageBox::Show("test");
}

در نمونه مثال های MSDN به جای ++C از #C به عنوان پروژه .Net برای Form ها استفاده شده است و آن را با MFC ترکیب کرده است، دوستان اگر آن را با #C تست کردند و انجام شد لطفا این موضوع را اطلاع دهند.

موفق باشید