PDA

View Full Version : استفاده از اسمبلی های دات نت داخل اپلیکشن های نیتیو



رضا عربلو
شنبه 18 اسفند 1386, 02:26 صبح
آیا می توان از اسمبلی های دات نت درون اپلیکیشن هایی نیتیو نظیر دلفی یا MFC استفاده کرد؟

جستجوهایی نیز انجام داده ام مثل :
How to call a managed DLL from native Visual C++ code in Visual Studio.NET or in Visual Studio 2005 (http://support.microsoft.com/kb/828736/en-us)
ولی متاسفانه کدی که با مثال بالا بدست می آید را می توان با ILDASM ببینم و این یعنی کد من نیتیو باقی نمی ماند.

اگر منبعی در این زمینه سراغ دارید لطفاً معرفی نمایید.

در ضمن تمام جستجوهای من به وبژگی که در زبان ++C وجود دارد اشاره می کنند. و به همین دلیل اگر زبان ++C این قابلیت را داشته باشد می خواهم فرا بگیرم.

با تشکر.

ICEMAN
شنبه 18 اسفند 1386, 09:29 صبح
من زیاد با .Net اشنایی ندارم ولی فکر نمیکنم منطقی باشه IL ، Native !!!

PC2st
شنبه 18 اسفند 1386, 09:39 صبح
ولی متاسفانه کدی که با مثال بالا بدست می آید را می توان با ILDASM ببینم و این یعنی کد من نیتیو باقی نمی ماند.
با c++/cli هم میشه کدهای native و هم کدهای managed داشت و به عبارتی اینها رو با هم ادغام کرد. کدهای native بعد از کامپایل هم هنوز native هستند. میشه از کدها و data type های native از طریق کدهای managed استفاده کرد (بدون نیاز به کار خاصی) اما نمیشه (بطور معمول) از کدهای managed از طریق کدهای native استفاده کرد و نیاز به انجام دادن یک کار خاصی هست که در لینکی که دادی، توضیحات لازم رو داده (و من از این قابلیت بی اطلاع بودم :بامزه:).

کامپایلر vc++.net با گرفتن بعضی از پارامترها، حق انتخاب به برنامه نویس میده که برنامه اش رو در چه حالتی کامپایل کنه، اگه از پارامتر clr/ استفاده بشه، برنامه امکان استفاده از کد native و managed رو با هم داره. اگه با پارامتر clr:safe/ استفاده بشه، فقط امکان استفاده از کدهای managed هست (مثل سی# و بیسیک.نت)، اگه با پارامتر clr:pure/ باشه، برنامه در حالت managed اما فقط امکان استفاده از data type های native هست. و اگه هیچ پارامتر بخصوصی در این زمینه مشخص نشه، برنامه بصورت کاملا native کامپایل میشه.


اگر منبعی در این زمینه سراغ دارید لطفاً معرفی نمایید.
من کتاب Apress Pro Visual C++/CLI and the .NET 2.0 Platform - Dec 2005 رو خوندم و خوب بود. (حجم pdf اش 23 مگابایته) (شاید بشه کتاب بهتری هم پیدا کرد)

Nima_NF
شنبه 18 اسفند 1386, 11:53 صبح
شما چند راه دارید:
1) نوشتن کدهای .Net توسط #C و غیره و سپس رجیستر کردن آن ها برای COM interop تا بتوانید به صورت COM در برنامه native خود در ++C از آن ها کنید.
(که در مقاله ای که شما ذکر کردید مطرح شده است)

2) استفاده از C++/CLI که هدف اصلی ارائه این قابلیت نیز ، همین ترکیب کدهای Native خود در ++C با unmanaged هست و تقریبا تمامی قابلیت ها را در اختیار شما قرار می دهد (اما به هر حال برنامه شما دات نتی می شود)؛ توضیحات را هم که جناب PC2st.ir دادند.

علاوه بر کتاب فوق ، من کتاب زیر را هم پیشنهاد می کنم که هدف آن همین آشنایی افراد با قابلیت ترکیب دو شیوه در ++C هست:
Beginning Visual C++ 2005 ( Ivor Horton) Wrox


ولی متاسفانه کدی که با مثال بالا بدست می آید را می توان با ILDASM ببینم و این یعنی کد من نیتیو باقی نمی ماند.منظورتان کدام کدها در مقاله هست ، manged dll یا C++ client؟

رضا عربلو
شنبه 18 اسفند 1386, 19:28 عصر
منظورم CPPClient بود. خیلی راحت می توانم با ildasm ببینمش.
من را به شک انداختید به همین دلیل طبق مراحلی که در لینک 1 آورده شده است آنرا ساختم:

Nima_NF
شنبه 18 اسفند 1386, 22:53 عصر
فکر می کردم هدف شما فقط استفاده از قابلیت های دات نت در Native هست ،
وقتی شما پروژه Native را از طریق CLR با قابلیت های دات نت ترکیب کنید ، پروژه شما دات نتی می شود و هر جا که مبتنی بر CLR باشد پس همین مشکل را دارد.

اما نکته ای که هنوز اطلاع دقیق ندارم در مورد شیوه interop COM هست ، من حتی از قابلیت های دات نت نیز در dll استفاده کردم و توانستم بدون استفاده از CLR نیز برنامه client که به صورت native هست را کامپایل کنم و درست هم کار می کرد !

.

رضا عربلو
شنبه 18 اسفند 1386, 23:27 عصر
دقیقاً همینطور است.
هدف من پاسخ دادن به این سوال است که آیا می توان از قابلیت های دات نت در اپلیکیشن های نیتیو استفاده کرد در حالی که اپلیکیشن من همچنان نیتیو باقی بماند؟
و تصمیم داشتم در صورتی که پاسخ مثبت باشد، سوالات بعدی ام را مطرح کنم.

در مورد شیوه interop COM نیز با توجه به اینکه بایستی :


1.Click Project, and then click ProjectName Properties.

Note ProjectName represents the name of the project.2.Expand Configuration Properties,
and then click General. 3.Click to select Common Language Runtime Support, Old Syntax (/clr:oldSyntax)
in the Common Language Runtime support project setting on the right pane, click Apply,
and then click OK.

همچنان برنامه بصورت CIL ترجمه می شود.