السلام عليكم
في البداية هاذا كود لي تحميل الاسماء في الليست بوكس
اسماء السكايب
الكود
PHP كود :
Public Class Form1
Dim skype As New SKYPE4COMLib.Skype
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
On Error Resume Next
For Each uub In skype.Friends
ListBox1.Items.Add(uub.handle)
Next
End Sub
لو نلاحض في كلمة handle بعد uub
الكود لو وضعته بي كلمة handle راخ يضيف لي الاسماء وكل شي تمام لاكن لو وضعت كلمة uub لحاله راح يضهر لي هاذي الجملة
المطلوب من السوال وش عمل كلمة handle
وشكرا
Handle المفروض تستعمل لجلب رقم مميز يشير الى GUI الذي تريد جلبه
الرقم يكون في العادة بهذا الشكل (13495631)
لكن في حالتك يبدو ان مصمم الكلاس يتفلسف فكيف ان Handle ترجع قيمة نصية !!!!
لان Handle ترجع قيمة من رقمية وليست نصية
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
كود :
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
وهذه دالة اخري تقوم بتحويل IntPtr الي String
كود :
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)
(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
كود :
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
وهذه دالة اخري تقوم بتحويل IntPtr الي String
كود :
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)
ماقصرت يا الغالي شرحت الكود وزيادة
الله يعطيك العافيه ماقصرت