ايران ويج

نسخه‌ی کامل: استفاده از Addressof با پارامتر
شما در حال مشاهده‌ی نسخه‌ی متنی این صفحه می‌باشید. مشاهده‌ی نسخه‌ی کامل با قالب بندی مناسب.
با سلام به همگی

من می خواستم بدونم چه جوری می شه هنگام کار با Addressof پارامترها را هم فرستاد

یعنی اینجوری

(Addressof Add(1,2

البته مثلا کد بالا رو در تابع Settimer به کار بردیم

من تا حالا اطلاعات رو توی یک متغیر ذخیره و از اون طریق توی تابع تصمیم گیری می کردم

ولی هم کار بیشتری رو می خواد و هم حجم برنامه زیاد می شه
نقل قول: من می خواستم بدونم چه جوری می شه هنگام کار با Addressof پارامترها را هم فرستاد

مطمعنا شما دقیقا نمیدونید Addressof چیکار میکنه ! Amaze
Addressof آدرس مربوط به یک تابع در حافظه رو به یک تابع CALLBACK میفرسته . ( توابع CALLBACK توابعی هستند که توسط سیستم عامل در برنامه شما صدا زده میشن )
معمولا توابع CALLBACK توی زبان VB که Event-Driven هست کاربرد زیادی نداره اگرچه بعضی مواقع در زمان کار با توابع API مثل Settimer نیاز میشن ( چون API با زبان C نوشته شدن )

روش کار توابع CALLBACK به این شکل هست که شما به عنوان برنامه نویس باید آدرس تابعی که تو برنامه نوشتین رو به تابع سیستم عامل بدین تا اون بدونه که در زمان مناسب ( مثلا در تابعی مثل Settime زمان مناسب همون تیک های ساعت هست ) کدوم تابع در برنامه شما رو به طور اتوماتیک صدا بزنه . فرمت تابعی که شما به عنوان CALLBACK معرفی میکنید توسط تابع سیستم عامل تعیین میشه نه شما .... پس اگر هم قرار باشه پارامتری به برنامه شما ارسال بشه اینکار باید توسط فرمت تابع CALLBACK مربوطه مجار باشه . تابعی که باید به عنوان CALLBACK به Settimer معرفی کرد پارامتر های خاص خودش رو نیاز داره ... اینم فرمت تابعی که باید شما به عنوان CALLBACK تعریف کنید :
http://msdn.microsoft.com/en-us/library/...S.85).aspx

نکته جالبی در مورد تایمر خود وی بی هست که گفتنش بد نیست . همون طور که میدونید اولا تایمر وی بی به نظر دقیق نمیاد و ثانیا تایمر وی بی رو نمیتونید توی پروژه های بدون پنجره بکار ببرید !! علت این قضیه اینه که وی بی از توابع CALLBACK برای تایمر های خودش استفاده نمیکنه بلکه وابسته به پیغام WM_TIMER هست که به صف پیغام های پنجره ارسال میشه ( اگر شما در تابع SetTimer بجای آدرس تابع CALLBACK مقدار صفر بفرستید این مکانیسم پیش گرفته میشه )
متاسفانه پیغامهای WM_TIMER دارای تقدم پایینی در صف پنجره هستند و این باعث میشه که به کندی پردازش بشن . همین عاملی برای کندی تایمر وی بی و کمبود دقت عملکرد اونه !! Cool