ايران ويج

نسخه‌ی کامل: URLDownloadToFile
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
سلام ..
من یه تابع API اینجا قرار دادم .. کار کردن باهاش رو بلدم .
فقط یه مسئله ای که وجود داره . می خواستم بدونم مقادیر برگشتی این تابع به ازاء مقادیر مختلف چیه ؟
اگه لیست یا جدول بهم معرفی بشه خیلی ممنون میشم .
تا اونجایی که می تونستم اینترنت رو زیر رو کردم ولی نتیجه مطلوبی بدست نیاوردم ..

کد:
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

در ضمن به ازاء چند حالت مقادیر بازگشتی رو حساب کردم ولی چون تعداد زیاد بود از حوصله ام خارج شد و الان می خوام که الان لیست کامل رو بدست بیارم .
پیشاپیش از راهنمایی های شما سپاسگذارم . Happy
مرسی واقعا بحث جالبی میشه
بازم از اون بحث هایی پیش اومد که من خوشم میاد

این 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 ها استفاده شود که کاربر بتواند تمام پیغامهای فرستاده شده رو دریافت کنه و کار رو بهتر و با جزئیات بهتر تموم کنه



اگه سوالی در مورد پارامتر پنجم بود سوال کن
نقل قول: به ظاهر این تابع با این پیجچیدگی که داره باید خروجیهای زیادی رو داشته باشه اما در کل این تابع در هر صورت دو مقدار رو برمیگردونه که

یکی S_OK هست که مبنی بر انجام موفقیت آمیز عمل انجام شده هست و
دیگری هم E_OUTOFMEMORY که مبنی بر انجام نشدن درخواست صورت گرفته شده هست

من که فکر نکنم اینطور باشه ...
اگر آدرس فایل اشتباه باشه ..
اگر فایل بر روی هاست محلی قرار داشته باشه ...
اگر فایل روی اینترنت نباشه ...
اگر آدرس ذخیره سازی اشتباه باشه ..

اینها همشون مقادیر برگشتیشون متفاوت هستش . البت تا اونجایی که من امتحان کردم بودم.

به هر حال آقا پدارم متشکرم .Clap
به به به
پدرام جان ایول داره
آدم واقعآ لذت می بره از اینهمه انگیزه و علاقه به کار

باید از این بخش حمایت بشه
اگه با همین نحو هرکس بیاد وتوابع رو توضیح بده این بخش بعد از
یه مدتی خیلی خوب و پر محتوا می شه
منظورم از نحو ابتدا توضیح تابع و بعد
مبدا فراخوانی و بعد پارامتر ها و بعد خروجی
مرسی خسرو جان Wink

با توجه به حرف های خسرو خان بنده جو گیر شدم و از این به بعد هر روز در این Forum یک تاپیک در مورد آموزش یک API به همراه مثال خواهم گذاشت

قربون همتون برم من

پس تا فردا Wink

ایول من می خواستم قبلآ این کار رو بکنم ولی کسی استقبال نکرد
منم سعی می کنم هفته ای چند تا تابع بزارم اینجا
ای ول خیلی توضیحات جالب بود . بنویسDممنون