(22-07-15, 06:00 AM)الشاكي لله كتب : Handle المفروض تستعمل لجلب رقم مميز يشير الى GUI الذي تريد جلبه
الرقم يكون في العادة بهذا الشكل (13495631)
لكن في حالتك يبدو ان مصمم الكلاس يتفلسف فكيف ان Handle ترجع قيمة نصية !!!!
لان Handle ترجع قيمة من رقمية وليست نصية
ههههههههههههههههههه ضحكتني ( لكن في حالتك يبدو ان مصمم الكلاس يتفلسف فكيف ان Handle ترجع قيمة نصية !!!! )
ههههههههههههههه
شكله صدق يتفلسف لنه الي قاعد اقراه غير عن عمل هاذا الكلمة في هاذا الكود
على العموم الله يعطيك العافيه ماقصرت
(22-07-15, 11:19 AM)silverlight كتب : Handle عبارة عن IntPtr وغالبا معطم DataTypes التالية يمكن تحويلها الي IntPtr :
System.Char
System.Int8
System.UInt8
System.Int16
System.UInt16
System.Int32
System.UInt32
System.Int64
System.UInt64
System.UIntPtr
غالبا من كتب الكود له هدف معين لإستخدام هذا الأسلوب لإسترجاع بيانات محددة خاصة ب Com Objects
و تقريبا و الله أعلم من كتب الكلاس بهذا الأسلوب يسترجع شئ اسمه binary interface أو بمعني أدق C++ interface
الدالة التالية توضح كيفية تحويل System.Char الي IntPtr
كود :
Friend Function GetIntPtr(value As Object) As IntPtr
Select Case value.GetType().FullName
Case "System.Char"
Return New IntPtr(AscW(CChar(value)))
End Select
Throw New ArgumentException("value")
End Function
وهذه دالة تقوم بتحويل String الي IntPtr
وهذه دالة اخري تقوم بتحويل IntPtr الي Stringكود :
Friend Function StringToIntPtr(str As String) As IntPtr
Dim ptr As IntPtr = CType(Nothing, IntPtr)
ptr = System.Runtime.InteropServices.Marshal.StringToHGlobalUni(str)
Return ptr
End Function
كود :
Friend Function IntPtrToString(ptr As IntPtr) As String
Dim result As String = System.Runtime.InteropServices.Marshal.PtrToStringUni(ptr)
Return result
End Function
و طبقا لمايكروسوفت يجب علينا أن نقوم بتحرير الذاكرة لذلك كالأتي
كود :
Friend Sub FreeMemory(ptr As IntPtr)
System.Runtime.InteropServices.Marshal.FreeHGlobal(ptr)
End Sub
و الكود التالي يوضح كيفية استخدام الكود
كود :
Dim str As String = "Visual Basix For Arab"
Dim ptr As IntPtr = CType(Nothing, IntPtr)
' change string to IntPtr
ptr = StringToIntPtr(str)
' change Intptr to String
Dim txt As String = IntPtrToString(ptr)
' According to MSDN must free unmanaged memory block
FreeMemory(ptr)
ماقصرت يا الغالي شرحت الكود وزيادة
الله يعطيك العافيه ماقصرت
الحمد لله رب العالمين على كل شي

