PDA

View Full Version : Marshaling with C#



sg.programmer
چهارشنبه 19 اسفند 1388, 08:02 صبح
سلام
یه مقاله از سایت زیر دیدم درباره
Marshaling

http://www.codeproject.com/KB/cs/marshaling-2.aspx

چی هست
کاربردش چیه
و...

تشکر

mehdi.mousavi
پنج شنبه 20 اسفند 1388, 01:04 صبح
سلام Marshaling چی هست کاربردش چیه و...تشکر

سلام.
Marshaling یعنی گرفتن داده از محیطی که در اون قرار دارید و انتقال اون، به محیط خارجی. اما Marshaling توی .NET یعنی بردن داده ها به محیطی خارج از App Domain! بعنوان مثال وقتی داده ای رو از یک Application Domain به Application Domain دیگه ای منتقل می کنید، در واقع دارید عمل Marshaling رو انجام میدید. بعبارت دیگه وقتی داده ای رو از یک برنامه به برنامه دیگری در domain دیگه منتقل می کنید (خواه روی همون باشه، یا نه)، در واقع دارید اطلاعات رو Marshal می کنید.

موفق باشید.

sg.programmer
پنج شنبه 20 اسفند 1388, 13:22 عصر
سلام. App Domain!

موفق باشید.

Application Domain

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

Saeed.Masoumi
پنج شنبه 20 اسفند 1388, 21:34 عصر
سلام فکر می کنم مثل استفاده از داده هایی که توسط توابع API ایجاد میشن باشه.
چون بعضی از مواقع در زمانی که داریم از API استفاده می کنیم از کدی به شکل زیر استفاده کنیم:


[DllImport(""), MarshalAs(System.Runtime.InteropServices.Unmanaged Type.Bool)]

آقای موسوی میشه راجع به این هم توضیح بدین؟

AliRezaPro
پنج شنبه 20 اسفند 1388, 23:59 عصر
در تکمیل سخنان دوستان ، وقتی می خواهید اشیاء را از یک برنامه به برنامه ی دیگر هدایت کنید به آن مارشالینگ میگویند.همچنین یک شیء میتواند از یک برنامه در یک کامپیوتر به یک برنامه در یپ کامپیوتر دیگر منتقل شود.

mehdi.mousavi
جمعه 21 اسفند 1388, 00:53 صبح
سلام فکر می کنم مثل استفاده از داده هایی که توسط توابع API ایجاد میشن باشه. چون بعضی از مواقع در زمانی که داریم از API استفاده می کنیم از کدی به شکل زیر استفاده کنیم:



[DllImport(""), MarshalAs(System.Runtime.InteropServices.Unmanaged Type.Bool)]
آقای موسوی میشه راجع به این هم توضیح بدین؟




سلام.
درسته. البته چیزی که شما نوشتید شبهه کد هستش... در واقع، شما با DllImport دارید متودی رو که خارج از Assembly فعلی هستش، declare می کنید. توی این declaration، شما میتونید دونه دونه formal parameter های تابع ( + مقدار بازگشتی) رو تعیین کنید که چطوری باید به کد Native، مارشال بشن. از کجا اینو میشه تعیین کرد؟

برای فهمیدن این موضوع، باید بدونید که COM چی هستش و چطور COM Component ها طراحی میشن. البته من قصد ندارم در این مورد توضیح بدم، چون حوصله همه رو سر میبره این مطالب، اما بطور کلی بخوام بگم، COM یک استاندارد Binary هستش که امکان تولید Component های نرم افزاری رو بوجود میاره. (این بنظر من، قویترین تکنولوژی ای هستش که مایکروسافت تا امروز عرضه کرده). COM بر مبنای RPC ساخته شده و ... بگذریم. از اصل ماجرا دور شدم. میخواستم بگم هنگام تعریف Interface ها در C++، برنامه نویس این فرصت رو داره که دونه دونه پارامترها رو توی IDL مارک کنه و تعیین کنه که هر پارامتر چطوری باید روی خط مارشال بشه (برای Component های DCOM). هر پارامتر، هر چی که مارک شده باشه، شما هم موقع DllImport باید همونطور اونو مارک کنید تا InterOp برای نقل و انتقال داده مورد نظر بین دو محیط، دچار مشکل نشه.

موفق باشید.

پاورقی:


IDL زبانی برای تعریف Interface هاست که در اختیار برنامه نویسان C++/COM هستش و کامپایلر خودش رو داره.
RPC تکنولوژی قدرتمندی برای تولید و ساخت برنامه های Client/Server هستش.
DCOM، یعنی Distributed COM. همون COM ای هستش که در سطح شبکه توزیع شده باشه.
Interop Assembly هم .NET Assembly هایی هستن که نقش یک پل ارتباطی بین محیط .NET و Native رو فراهم میکنن.

mehdi.mousavi
جمعه 21 اسفند 1388, 01:02 صبح
Application Domain
باز تر می کنید بحث را و یه مثال ساده اراه کنید تشکر

سلام.
Process چه نقشی تو Windows داره؟ در واقع مرز اجرایی هر برنامه هستش، به نحوی که هر برنامه "فضای آدرسی" خودش رو داره و اجازه دسترسی مستقیم به "فضای آدرسی" برنامه دیگه ای رو نداره. این توضیح در مورد Process های Native (غیر .NET) صدق میکنه، اما توی .NET و CLR، مایکروسافت یک لایه جدا کننده دیگه هم به Process ها اضافه کرد و اسمش رو Application Domain یا بطور خلاصه، App Domain گذاشت.

در واقع، حالا دیگه تو .NET، هر Process میتونه حاوی N تا Application Domain باشه و هر application domain، فضای آدرسی خودش رو داره، دسترسی به app domain های دیگه رو نداره. (مگه اینکه این اجازه صادر بشه) و ...

این چه خوبی ای داره؟ یه خوبیش اینه که اگر یک app domain ای crash کنه، app domain های دیگه به کار خودشون ادامه میدن. شما می تونید یک app domain رو stop کنید، یا یکی دیگه رو راه بندازید بدون اینکه به hosting process صدمه ای برسه...

اگر به این موضوع علاقمند هستید، لطفا برای اطلاعات بیشتر به MSDN و Google رجوع کنید.
موفق باشید.