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

مشكلة في فهم دوال API

بدأه احمد محمد546 في 15 سبتمبر 2012 · 3 رد · 1,076 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

طبعاً قمت بالبحث في الانترنت بشكل عام و في المنتدى بشكل خاص قبل ان اقوم بادراج هذا السؤال ، ولم اجد اي نتيجة ، جميع المواضيع تتحدث عن شرح لوظيفة دالة API فقط . و المشكلة كالآتي :

قمت بتصريح دالة API في قسم التصريحات العامة كالآتي :


"kernel32" Alias "CreateDirectoryA" _
(ByVal lpPathName As String, _
lpSecurityAttributes As SECURITY_ATTRIBUTES) As Long


Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Dim mfolder As SECURITY_ATTRIBUTES
Private Declare Function CreateDirectory Lib _

ثم قمت باستدعاء الدالة ( التي تعمل على انشاء مجلد ) في زر الأمر كالآتي :


CreateDirectory "C:\My Folder", mfolder

المشكلة هي في دالة API بشكل عام ، اذ ان جل مانقوم به هو نسخها و لصقها دون فهم لها . الاسئلة التي دعتني لادراج الموضوع هي :

1- لماذا قمنا بانشاء انواع للنوع SECURITY_ATTRIBUTES ، اي لماذا هذه الاسطر البرمجية ومتى نستخدمها :


nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Type SECURITY_ATTRIBUTES

2- من اين نقوم باحظار المتغيرات او الباراميترات ( حتى لا اعرف ماهي ) التالية و على اي اساس نقوم بادراجها ( nLength و lpSecurityDescriptor و bInheritHandle ) ؟

3- لماذا قمنا بتصريح النوع الآتي و علي أي اساس تم ذلك :


Dim mfolder As SECURITY_ATTRIBUTES

وفي النهاية اتمنى ان يقوم احد الاعضاء المتميزين بشرح هذه المسائل الرئيسية شرحاً وافيا ًولكي يسد نقصاً في هذا المجال ، لانني وجدت ان هناك نقص يؤدي الى مشكلة للتعامل مع هذه الدوال وذلك لانني لم احصل على اجابة من المواقع و المنتديات العربية خلال بحثي .

اتمنى ان لا اكون قد اطلت عليكم ...

والسلام .

#2

بصورة أخرى و لتوضيح الاشكال أعلاه :

نعرف ان دالة ExitWindow تعمل على اعادة تشغيل او اغلاق الجهاز ،وهي بالصورة الآتية :



Public Declare Function ExitWindows Lib "user32" Alias "ExitWindows" (ByVal dwReserved As Long, ByVal uReturnCode As Long) As Long

وتأخذ الثوابت الآتية :

Public Const EWX_FORCE = 4

Public Const EWX_LOGOFF = 0

Public Const EWX_REBOOT = 2

Public Const EWX_SHUTDOWN = 1

كيف أعرف ان هذه الدالة تأخذ هذه الثوابت ؟ هذه الثوابت وجدتها في المنتدى عند شرح دوال API . ولكن لو اريد استعمال دالة معينة أخرى فكيف سأعرف انها تحتوي على ثوابت و كيف اجد ثوابتها ؟ ليس المقصود ( بكيف اجد الثوابت ) هو الطريقة , فاعرف ان هذه الثوابت موجودة في برنامج API Viewer ولكن هذه الثوابت منفصلة عن الدوال في هذا البرنامج ، فكيف اعرف ان الثوابت الفلانية خاصة بالدالة الفلانية ؟ وكيف اعرف ان الثابت الفلاني يؤدي العمل الفلاني ؟ ارجوا ان تكون الفكرة اتضحكت .

-----

كذلك ان بعض الدوال تحتاج لتصريح انواع لها كما في الدالة في المشاركة الأولى التي تتطلب تصريح الآتي :


nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type
Private Type SECURITY_ATTRIBUTES

فكيف استطيع ان اعرف ان الدالة الفلانية يجب تصريح هذه الانواع لها او لا ؟

#3

أنت ليه تاعب نفسك ؟؟؟

أي دالة تحتاجها أبحث عنها علي الإنترنيت بالمنتديات والمواقع

أو علي موقع Microsoft علي الرابط التالي http://msdn.microsoft.com/en-US/

أو يمكنك الإستعانة بمعاون MSDN Help الموجودة لديك بالبرنامج كما هو موضح بالصورة التالية :

post-126779-038575000 1347780500_thumb.p

بالتوفيق

المرفقات
untitled.PNG
2

لا تخلط ما بين شخصيتي وأسلوبي .. فشخصيتي هي

ما أنا عليه وتحت تصرفي .. وأسلـوبي يعتمد عليـك

أنت وتصرفاتك

ولحظاتي صمت... وصمـت لحظاتي كلام ... كلامه

اشد آلام ... فصمتي أنا عنوان

عصر التكنولوجيا المعلوماتية(مدونتي الخاصة)

My FaceBook

#4

شكراً عزيزي ،اذاً لا غنى لمستخدم دوال API عن مكتبة MSDN او API-Gidue ، بدأت اتعلم API حديثاً وكنت اتصور ان هناك طريقة دون الرجوع الى مكتبة SMDN .

شكراً لك مرة أخرى

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