الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Struct

مغلق
بدأه ahabdeen في 31 مارس 2004 · 4 رد · 651 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

StructLayout?????

ايه المقصود منها و الستفادة؟؟؟???

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#2

دوت نيت لا يضمن أن يتم تخزين أعضاء الـstructs بطرقة معينة، اي أنه من الممكن أن تكون مخزنة في أجزاء غير متصلة مع بعضها البعض.

struct Random
{
	int i1;
	string s1;
}

في المثال السابق من غير المعروف ان كان i1 يقع في عنوان الذاكرة السابق لـs1.. ليس هناك مشكلة في دوت نيت، ولكن المشكلة عندما يتطلب الأمر منك أن تستدعي دالة API مثلا، فعندها لابد أن يكون i1 في العنوان السابق تماما لـs1.. ولذلك StructLayout موجودة في سي شارب لتعطيك الامكانية للتحكم في تخزين الـstrcut..

StructLayout.Sequential يضمن لك أن يتم التخزين بالتتابع:

StructLayout(LayoutKind.Sequential)]
struct Sequential
{
	int i1;
	string s1;
}

أما Explicit فيسمح لك بامكانية أكبر للتحكم في الفواصل بين الاعضاء..

تم تعديل هذه المشاركة بواسطة BAZRAMIT في 31 مارس 2004 في 23:59

#3

شكرا على الرد

طيب وال MarshalAs???

ايه فائدتها؟؟؟؟؟

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

#4

تستخدم MarshalAs لتحديد ماهية المتغير من وجهة نظر COM..

مثلا اذا كنت تعاملت مع COM فيما سبق ستعرف أن BSTR يستخدم لتعريف ما يمكن أن يقابل في سي شارب string.. وستضطر لعمل مارشال للـstring الى Bstr..

أيضا عندما تستخدم دوال APIs ستضطر لعمل Marshalling لبعض المتغيرات، ودعني أعطيك مثالا..

هنالك structure في يسمى FILE_INFO_3 SDK:

typedef struct _FILE_INFO_3 {
  DWORD     fi3_id;
  DWORD     fi3_permissions;
  DWORD     fi3_num_locks;
  LPWSTR    fi3_pathname;
  LPWSTR    fi3_username;
} FILE_INFO_3, *PFILE_INFO_3, *LPFILE_INFO_3;

إذا أردت أن تقوم بتعريف structure مطابق للمذكور في سي شارب تقوم بكتابته كالتالي:

[StructLayout(LayoutKind.Sequential)]
struct FILE_INFO_3
{
	public int fi3_id;
	public int fi3_permissions;
	public int fi3_num_locks;
	[MarshalAs(UnmanagedType.LPWStr)] fi3_pathname;
	[MarshalAs(UnmanagedType.LPWStr)] fi3_username
}
#5

thx 4 ur help

ahabdeen.jpg

<marquee>

مش موجود بصفة دايمة للامتحانات

</marquee>

هذا الموضوع مغلق.

مواضيع مشابهة