سلام به همه امروز ارامه تکمیلی آموزش روز قبل رو میخوام براتون بگم که راجع به قسمت [([arglist])] هست که در قسمت قبل به صورت کلی باهاش آشنا شدیم و همچنین به آشنایی با انواع آرگومانها و تشخیص نوع انها خواهیم پرداخت
اما بازم براتون یک تعریف کلی از قسمت [([arglist])] میکنم
برای اینکه راحتتر باشید یه قسمت از مثال آموزش قبل رو اینجا گذاشتم
کد:
[Scope] Declare Sub name Lib "libname" [Alias "aliasname"] [([arglist])]
کد:
[Scope] Declare Function name Lib "libname" [Alias "aliasname"] [([arglist])] As type
اگه دقت کنید در هر دو API شما این
[([arglist])] را میبینید
یادآوری: [] به معنی اون هست که مقدار دادن به این قسمت اختیاری هست و در صورت نیاز نداشتن میتونیم از این گونه قسمت ها
استفاده نکنیم
ما در این قسمت به تابع مقادیر لازم رو برای پردازش کردن میدیم
ببینید تابع مثل یک کارخانه میمونه که پیچ و مهره و لوازم مورد نیاز از یک در وارد میشه و وسیله نهایی که در کارخونه ساخته میشه
از در دیگه اون بیرون میاد
در این روند ما به (که پیچ و مهره و لوازم مورد نیاز) ورودی میگیم که همون arglist هست و به (وسیله نهایی) هم مقدار برگشتی تابع میگیم
از این به بعد ما به قسمت arglist درگاه ورودی API میگیم
اما ما چگونه تشخیص بدیم که داده ورودی ما توی یک API باید چی باشه
به این دو مثال توجه کنید
کد:
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
کد:
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
اگر دقت کنید میبینید که هر دو تابع ورودی های خاص خودشون رو دارن
ساختار دوتا از اونا رو بررسی میکنیم
کد:
ByVal lpClassName As String
ByRef lParam As Any
در اول دو خط دو کلمه متفاوت
ByVal و
ByRef رو میبینید که این دو کلمه به شما طریقه فرستادن مقدار به آرگومان شما رو مشخص میکنه که هر کدام به ترتیب مخفف by value و by reference هستند که باز با معانی زیر تعریف میشوند
by value=
به وسیله مقدار مقدار دهی شود
by reference=
به وسیله مرجع مقدار دهی شود
این نکته هم بگم که وقتی با VB کار میکنیم ویژوال بیسیک به صورت پیشفرض ByRef
قسمت دیگه ای که به ما درشخیص نوع داده ارسالی کمک میکنه String و Any هست
که در اینجا ما با دو نوع رشته ای
(String) و نوع متنوع
(Any) که میتواند نام دیگر Variant هم باشد سروکار داریم
در نوع رشته ای بدین معنیست که ما بجز داده ای از نوع رشته ای داده دیگری نمیتوانیم ارسال کنیم
در نوع متنوع هم بدین معنیست که ما از هر نوع داده برای این آرگومان میتوانیم استفاده کنیم
یکی دیگر از راه های تشخیص نوع داده ورودی توجه به نام آرگومان تابع هست
که در اینجا lpClassName و lParam هست
اینها انواع مختلفی دارند که باید با تمرین در ذهنتان باقی بماند
مثلا ما با دقت در نام lpClassName و با توجه به قسمت ClassName متوجه این میشویم که این آرگومان نام یک کلاس هست و ما باید از نوع داده String استفاده کنیم اما همیشه با نگاه کردن به نام آرگومان تشخیص نوع آن مقدور نیست
پایان
من مقصودم از گذاشتن این دو آموزش این بود که شما طریقه استفاده از API ها رو درک کنید تا وقتی که با این موارد رو برو میشید بتونید به راحتی طریقه استفاده از Api رو بفهمید
از جلسه بعد به آموزش Api های ویندوز همراه با مثال و توضیح مپردازم و در حین مثالها هم به بررسی نکاتی که احتمالا بدرد بخوره خواهیم پرداخت
سوال و انتقاد همینجا
تا بعد