سلام
چند وقتی هست که به مبحث Marshalling برخورد کردم. ولی هنوز چیز زیادی دستگیرم نشده. اگه دوستان زحمت بکشن که در این تاپیک، به آموزش Marshalling با ذکر مثال برپدازند، خیلی خیلی ممنون می شم.
سلام
چند وقتی هست که به مبحث Marshalling برخورد کردم. ولی هنوز چیز زیادی دستگیرم نشده. اگه دوستان زحمت بکشن که در این تاپیک، به آموزش Marshalling با ذکر مثال برپدازند، خیلی خیلی ممنون می شم.
سلام
مارشالینگ پروسسی هستش برای تغییر شکل دادن حالات object ها در حافظه به طوری که برای ذخیره یا انتقال به محیط دیگه مناسب بشه
در .net مارشالینگ برای تبدیل بین unmanaged تایپ و CLR تایپ در P/invoke ,COM intropاستفاده می شه
متاسفانه چون بحث مارشالینگ طولانی و پر از نکات هستش و شما چیز کلی گفتید شما رو به خوندن مطالب موجود در لینک زیر توصیه می کنم
http://msdn.microsoft.com/en-us/library/eaw10et3.aspx
آخرین ویرایش به وسیله r00tkit : پنج شنبه 15 مهر 1389 در 23:48 عصر
Kernel Mode Developer
RootKitSMM@Yahoo.com
در ادامه صحبتهاي آقاي geek1982:
مارشالينگ به نام هاي ديگري همچون Inflating و Serialize نيز معروف هست.
امیدم به دستان زیبای اوست . آنکه می آید . همان که نامش منجی ست ....
به راستی اگر غرق نبودیم چرا مارا به منجی ای نیازمند کرده اند؟ ... دنیا دریاست ....
دلنوشته های من
از اینکه به این موضوع بها می دید ممنونم. ولی اگه موضوع رو بازتر کنید، عالی می شه.
سلام
مثال:
توضیح: وقتی توی C# تابع های unmanaged رو فراخوانی می کنید CLR باید پارامتر ها و نوع بازگشتی رو مارشالینگ بکند
class PlatformInvokeTest
{
[DllImport("msvcrt.dll")]
public static extern int puts([MarshalAs(UnmanagedType.LPStr)]string m);
[DllImport("msvcrt.dll")]internal static extern int _flushall();
public static void Main()
{
puts("Hello World!");
_flushall();
}
}
برای هر نوع در .net یه نوع پیش فرض در محیط غیر مدیریت شده وجود داره که CLR از این پیش فرش ها استفاده می کنه برای مارشال کردن خود کار در موقع فراخوانی توابع unmanaged
که به طور مثال string در .net به LPTSTR مارشال می شه( تبدیل می شه)
شما می تونی از MarshalAs استفاده کنی و بگی که فلان نوع از .net به چی مارشال بشه
و یه نکته می مونه در کنار تائید صحبت های اقای salehbagheri این رو بگم که در بعضی زبان ها Serialize و مارشالینگ فرق دارن(مثل همین C#) و در بعضی زبان ها نه ( مثل Ruby روبی با Marshal.dump و Marshal.load مارشالینگ یا Serialize می کنیم)
مثال در روبی
اگه سوالی بود در خدمتیم
def marshaling(x)
y=Marshal.dump(x)
end
def unmarshaling(x)
y=Marshal.load(x)
end
x=marshaling('ten')
puts unmarshaling(x)
آخرین ویرایش به وسیله r00tkit : جمعه 16 مهر 1389 در 14:04 عصر
Kernel Mode Developer
RootKitSMM@Yahoo.com