دوباره سلام.
متاسفم که اینقدر طول کشید که جواب بدم.
در مورد Connect شدن و به طور کلی ساخت یک Connection بهترین روش استفاده از RasAPI32.dll
هست که شامل یک سری تابع و ساختار هست. همونطور که میدونید با استفاده از DllImport میتونید
توابع مورد نظرتون رو Invoke کنید. برای structures ها هم روشی نظیر DllImport وجود داره.
برای invoke کردن یک struct از کلاس StructLayout استفاده میشه. یه نمونه ازش به این شکل هست:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همونطور که میبیند در Constructor این کلاس چندین آرگومان وجود داره که LayoutKind یک از اونهاست.
این آرگومان نحوه مدیریت حافظه رو مشخص میکنه.
بطور کلی کدها به دو دسته تقسیم میشن:
1-کد مدیریت نشده unmanaged Code
2-کد مدیریت شده managed Code
در مورد کدهای مدیرت نشده مدیرت حافظه با شما هست. که حتما با اون آشنا هستید. مثلا وقتی در ++C
چنین کدی رو مینویسید :
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
در حقیقت pInt روی Heap ایجاد میشه و در پایان برنامه شما باید با استفاده از []delete اون رو از Heap پاک
کنید. همونطور که میبینید در این جا مدیریت حافظه با شماست. این یک مثال خیلی ساده بود. چون مسائلی
مثل تغییر آدرس ها یا فشرده سازی درش مطرح نشد.
در مورد کدهای مدیرت شده ای مدیریت توسط کامپایلر انجام میشه. فشرده سازی و یا جابه جای رو خودش
انجام میشه و در پایان حافظه استفاده شده رو خالی میکنه.
این توضیح رو دادم بابت اینکه وقتی از LayoutKind.Sequential استفاده میکنید در حقیقت از کدی که
unmanaged هست به صورت managed استفاده میکنید. (ترتیبی) در Net. مبحثی به نام Marshaling وجود
داره تعبیر اون مهاجرت از managed به unmanaged و برعکس هست که تحت عنوان Marshal استفاده میشه.
البته در قالب یک کلاس.
خب فکر کنم این توضیحات لازم بود.
نمونه این که براتون میذارم به صورت هست:
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
همونطور که میبنید قبل از شبیه سازی بعضی از property های structure از عبارت MarshalAs استفاده
شده.اگه به ساخاتر struct توجه کنید (MSDN) میبیند که این آرگومان ها یک رشته با طول ثابت هستند. برای
مدیریت کردن این رشته ها از این کلاس استفاده میشه. توضیحش خیلی مفصل تر هست.
اگه مشکلی پیش اومد اطلاع بدید.