PDA

View Full Version : توابع Wininet



Yasersadegh
یک شنبه 12 اسفند 1386, 06:41 صبح
سلام خدمت دوستان گرامی
من می خوام یه برنامه بنویسم که روی یه FTP مثلا FTP توی IIS ویندوز کار می کنه. برای همین از توابع Wininet.dll استفاده می کنم. ولی وقتی این کارو می کنم ( یعنی از این توابع استفاده می کنم.) ارور می ده که این توابع باید extern (External) باشند.
لطفا هر کسی که راجع به استفاده از توابع Wininet و توابع extern چیزی می دونه یه کمکی به من بکنه.:خجالت:
با تشکر

Yasersadegh
یک شنبه 12 اسفند 1386, 11:08 صبح
چرا کسی جواب منو نمیده.
یعنی کسی تا حالا با این توابع کار نکرده.

Nima_NF
یک شنبه 12 اسفند 1386, 16:39 عصر
برای دریافت پاسخ باید کمی صبور باشید .
احتمالا شما Wininet.lib را به پروژه خود لینک نکرده اید ، این پیام در این چنین مواقعی داده می شود.

Yasersadegh
یک شنبه 12 اسفند 1386, 21:06 عصر
سلام
اگه ممکنه یه توضیحی راجع به نحوه لینک کردن Wininet.lib به پروژه بدهید.

ممنون

Nima_NF
یک شنبه 12 اسفند 1386, 22:41 عصر
در بالای فایل بنویسید:



#pragma comment(lib, "Wininet.lib")


یا به جای کد فوق از منوی project گزینه option را انتخاب کنید و در بخش linker -> linking -> additional این کتابخانه را وارد کنید.

Yasersadegh
دوشنبه 13 اسفند 1386, 11:41 صبح
دوست عزیز از شما ممنونم.
اینکارو کردم و دستورات زیر رو نوشتم :




HIO=InternetOpen("Wininet Test",INTERNET_OPEN_TYPE_PROXY,TEXT("proxy"),TEXT("<local>"),0);

HIC=InternetConnect(HIO,TEXT("fttp://127.0.0.1"),INTERNET_DEFAULT_FTP_PORT,NULL,NULL,INTERNET_SER VICE_FTP,INTERNET_FLAG_TRANSFER_ASCII,0);

FtpPutFile(HIC,TEXT("C:\\Test.cab"),TEXT("Test2.cab"),INTERNET_TRANSFER_TYPE_ASCII,0);


دو دستور اول رو درست انجام می ده و دستور آخر رو نمی تونه انجام بده و ارور می ده.
اروری که می ده می گه:
ERROR_HANDLE_INVALID
The handle is invalid.

این ارور هرکاری کردم نتونستم رفعش کنم.
اگه ممکنه یه توضیحی هم برای رفع این مشکل بفرمایید.:متفکر:

ممنون:خجالت:

Nima_NF
دوشنبه 13 اسفند 1386, 16:00 عصر
از طریق debug کامپایلر خط به خط این دستورات را اجرا کنید و مشاهده کنید که آیا مقادیر HIO و HIC برگشتی از توابع NULL هستند یا خیر. اگر NULL بود نشاندهنده این است که خطایی در آن مرحله رخ داده است.

در صورتی که می خواهید دقیقا بدانید که چه خطایی رخ می دهد از فراخوانی GetLastError بعد از هر تابع استفاده کنید تا به شما نوع خطا را دقیق تر اعلام کند ،
ضمنا از InternetGetLastResponseInfo هم در برخی موارد برای خطاهای سرور و اینترنت در این چنین موارد می توانید استفاده کنید.

Yasersadegh
دوشنبه 13 اسفند 1386, 16:56 عصر
ممنون
دو دستور اول HIO و HIC رو NULL بر نمی گردونه و InternetOpen و InternetConnect به درستی انجام می شود ولی دستور آخر باتوجه به تابع GetLastError دارای ارور شماره 6 است که این ارور همین ERROR_HANDLE_INVALID می باشد.
این ارور رو نمی دونم باید چکارش کنم.

Nima_NF
دوشنبه 13 اسفند 1386, 17:59 عصر
فکر می کنم اشتباه شما در FtpPutFile برای فلگ پارامتر چهارم هست ، که باید FTP_TRANSFER_TYPE_ASCII باشد ، احتمالا اشتباها مورد دیگری به کار بردید.

Yasersadegh
دوشنبه 13 اسفند 1386, 23:07 عصر
ممنون از اینکه منو تحمل کردید و به سوالاتم پاسخ دادید.
ولی فلگ پارامتر چهارم رو هم درست کردم ولی بازهم همون ارور رو میده . با توجه با این که ارور ERROR_HANDLE_INVALID رو میده من فکر می کنم که مشکل از نحوه Connect باشه ولی نمی دونم چه مشکلی!؟