مرسی واقعا بحث جالبی میشه
بازم از اون بحث هایی پیش اومد که من خوشم میاد
این API رو که در موردش میخوایم صحبت کنیم رو من بازم میزارم اینجا
کد:
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
وقتی که میای و به این API همینجوری نگاه میکنی میبینی که بابا یه API ساده و مفیده که هیچ نکته ای توش نهفته نیست
اما وقتی که جلو میری میبینی برا خودش عظمتی داره حالا من کامل به توضیح این API میپردازم
اما کارایی این API به طور کلی بارگذاری فایلهای مختلف از وب هست
خوب اول به برسی آرگومانها میپردازیم
پارامتر اول pCaller
کد:
این پارامتر در واقع کار API رو راحتتر میکنه بدین صورت که ما با دادن این پارامتر به API نوع برنامه ای رو که این API رو فراخونی میکنه رو مشخص میکنیم
که میتونه این مقادیر خاص باشه
اگر Win32-App (همون برنامه های Exe خودمون توی ویندوز) باید اونو 0 قرار بدیم
اما اگه فراخوان Component Object Model که همون (COM) هست باید برای پارامتر از آدرس کنترول کننده lpunknown و این در صورتی هست که COM خود جزءی از یک ActiveX Control باشه که خیلی بحث پیچیده ای داره و ما واردش نمیشیم
پارامتر دوم szURL
کد:
که همون آدرس فایل مورد نظر برای بارگذاری در وب هست مثل
http://www.forum.iranvig.com/newreply.php یا
http://www.iranvig.net/downloads/File.zip
پارامتر سوم szFileName
کد:
که این پارامتر هم آدرس فایل مورد نظر برای ذخیره هست مثل
c:\File.Zip
پارامتر چهارم dwReserved
کد:
این پارامتر هم برای مواقع ضروری طراحی شده و در حال حاضر برای کسانی که سیستم ایکس پی SP2 به قبل دارند کارایی خاصی نداره یعنی در فانکشن داخلی API فراخونی نمیشه و بهترین کار اینه که اونو برابر 0 قرار بدید
پارامتر پنجم lpfnCB
کد:
این پارامتر مهمترین و پیچیده ترین پارامتر این API هست
که از طریق این پارامتر حلقه پیامی فراخوانی میشه که IBindStatusCallback
نام کلیش هست و کاربر بسته به نیازش میتونه از این پروسجرها استفاده کنه که توسط AddressOf فراخونی میشه
که عبارتند از
GetBindInfo
که این پروسجر به شما اطلاعاتی راجع به بارگذاری میده
OnDataAvailable
این پروسجر به شما وجود Data رو اطلاع میده که کاربر بتونه اونو به راحتی بار گذاری کنه
OnProgress
این پروسجر نیز به شما درصد بارگذاری شده رو نشون میده و اطلاعاتی که حین دانلود دریافت میکنید
اما تعداد اینها بسیار زیاده و هر کدوم برا خودشون نکته های زیادی در بر دارن که میتونه به ما کمک کنه
اما برمیگردیم به جواب سوال Arnh خان
به ظاهر این تابع با این پیجچیدگی که داره باید خروجیهای زیادی رو داشته باشه اما در کل این تابع در هر صورت دو مقدار رو برمیگردونه که
یکی S_OK هست که مبنی بر انجام موفقیت آمیز عمل انجام شده هست و
دیگری هم E_OUTOFMEMORY که مبنی بر انجام نشدن درخواست صورت گرفته شده هست
اما برای کنترول روند انجام درخواست با این API حتما باید از CallBack ها استفاده شود که کاربر بتواند تمام پیغامهای فرستاده شده رو دریافت کنه و کار رو بهتر و با جزئیات بهتر تموم کنه
اگه سوالی در مورد پارامتر پنجم بود سوال کن