![]() |
|
Convert Delegate to IntPtr & Viceversa - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : Convert Delegate to IntPtr & Viceversa (/showthread.php?tid=21390) |
Convert Delegate to IntPtr & Viceversa - silverlight - 15-08-17 هذا الموضوع الهدف منه كيفية تحويل Delegate الي IntPtr و العكس هذا الموضوع ليس للمبتدئين توضيح سريع : Deleagte : وكما هو معلوم للجميع عبارة عن مؤشر ما هذا المؤشر ربما يشير الي دالة Function او يشير الي روتين Sub داخل اي كلاس او داخل اي فئة عملية التحويل من Deleagte الي IntPtr و العكس ممكن أن تتم باستخدام بعض الدوال الموجودة في المارشال كلاس و الروابط التالية توضح اسماء تلك الدوال التحويل من Delegate الي IntPtr الرابط التحويل من IntPtr الي Delegate الرابط المثال التالي يوضح كيفية استخدام الدوال الموجودة في المارشال كلاس المثال : تحويل Delegate Function الي IntPtr و العكس أولا لنوضح كيف تكتب Delegate مثلا لكي تكتب Delegate يشير الي دالة يجب أن يكون Signature واحد و المقصود بكلمة أن يكون Signature واحد هو أن تكون المدخلات و المخرجات لهذه الدالة هي نفسها التي يجب استخدامها في كتابة Delegate ولتوضيح الأمر بشكل مبسط لناخد الدالة IO.File.Exists الرابط هذه الدالة Syntax الخاص بها كالأتي Public Shared Function Exists (path As String) As Boolean مثلا لكي تستخدم الدالة فأنت تحتاج أن تمرر لها String يشير الي مسار اي ملف و هذا ما يطلق عليه المدخلات ثم تحصل من الدالة علي نتيجة عبارة عن Boolean و هذا ما يطلق عليه المخرجات ولكي تكتب Deleagte يشير الي هذا الدالة فيجب أن تكتبه كالأتي PHP كود : Public Delegate Function IsFielExists(FilePath As String) As Boolean الأن لنقوم بتحويل Deleggte الي IntPtr والخطوات التالية توضح ذلك 1- نقوم بتعريف متغير يعبر عن Deleagte PHP كود : Dim delegateParams As IsFielExists = New IsFielExists(AddressOf Me.FileExists) أو يمكن كتابة الكود بشكل مباشر كالتالي PHP كود : Dim delegateParams As IsFielExists = New IsFielExists(AddressOf IO.File.Exists) 2- نقوم بتحويل Deleagte الي Intptr PHP كود : Dim ptr As IntPtr = IntPtr.Zero3- الكود التالي من أجل التوضيح فقط لكي نتأكد أن عملية التحويل قد تمت PHP كود : If ptr <> IntPtr.Zero Thenالكود كاملا: PHP كود : Public Class Form1و للتحويل من IntPtr الي Deleagte مرة أخري فقط نحتاج أن نعرف Type الخاص بهذا Delegate و قيمة IntPtr الخاصة به و نستخدم دوال المارشال كلاس للتحويل PHP كود : Dim t As Type = delegateParams.GetTypeأتمني يكون الموضوع هذا مفيدا للبعض منكم RE: Convert Delegate to IntPtr & Viceversa - silverlight - 15-08-17 الكود كاملا بعد كتابته علي هيئة دوال PHP كود : Public Class Form1 |