PDA

View Full Version : حرفه ای: سوالي در مورد توابع api



just4froum
شنبه 07 آبان 1390, 20:26 عصر
با سلام يك سوال مدت هاست فكرمو مشغول كرده :

براي مثال تابع زير اتصال به اينترنت را بررسي كرده و مقدار 1 يا 0 را بر مي گرداند.

Private Declare Function InetIsOffLine Lib "url.dll" (ByVal dwFlags As Long) As Long

خوب حالا مگه مقدار برگشتي 1 يا 0 نيست پس چرا نوع مقدار برگشتي long است ؟؟؟

با تشكر ا

محسن واژدی
چهارشنبه 11 آبان 1390, 11:27 صبح
سلام
قبل از اینکه سیستم های 64 بیتی به میدان بیایند، از سیستم عامل های 32 بیتی استفاده میشد. 32 بیت با Long معادل است. ممکن است از دلایل بکارگیری نوع داده Long این موضوع باشد،
اگر به روزهایی برگردیم که از سیستم عامل های 16bit استفاده میشد میبینیم که مقادیر برگشتی توابع Integer است. همچنین اگر توجه کرده باشد اکثر dllهای 32 بیتی برای تمیزداده شدن از نسخه های 16 بیتی عدد 32 را در نام خود دارند

موفق باشید

AMIBCT
چهارشنبه 11 آبان 1390, 12:12 عصر
در فراخوانی توابع به صورت stdcall که شیوه‌ی استاندارد در فراخوانی توابع ویندوز است
مقدار بازگشتی تابع در رجیستر EAX ذخیره می‌شود

این رجیستر هم یک رجیستر 32 بیتی و عددی است
بنابراین مقدار بازگشتی تمام توابع API ویندوز عددی 32 بیتی یا Long در Visual Basic است
مقادیر بازگشتی دیگر هم در ظاهر شکل دیگری هستند و از همین نوع تبدیل می‌شوند