تحلیل دستوارت :
دستور Declare در حقیقت برای ویژوال بیسیک مشخص می کند که یک تابع DLL خاص را از کجا و چگونه می توانید فراخوانی کند. ساده ترین راه برای اضافه کردن عبارت Declare به کد برنامه استفاده از توابع API Viewer که شامل تعریف بسیاری از توابع API ویندوز، به همراه تعریف ثابت ها و نوع داده های مورد نیاز برای آن توابع است.
در اینجا مثالی از نحوه تعریف تابع GetTempPath که مسیر پوشه ی Temporary ویندوز را بر می گرداند (معمولا c:\windows\temp) اورده شده است.
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کلمه Declare به ویژوال بیسیک اعلام می کند شما قصد تعریف یک تابع DLL دارید. در یک ماژول استاندارد (General فرم)عبارت Declare می تواند بصورت Public و یا private تعریف شود بسته به اینکه شما بخواهید از آن تابع تنها در همان یک ماژول و یا در کل پروژه استفاده کنید؛ در یک ماژول کلاس، عبارت Declare تنها بصورت Private تعریف می شود.
نامی که بعد از کلمه کلید Function قرار می گیرد، نام تابع است( البته نامی که شما در پروژه تان برای فراخوانی تابع استفاده می کنید). این نامه می تواند کاملا مشابه نام خود تابع API (همان نامی که در فایل DLL برای آن در نظر گرفته شده است) باشد. اگر بخواهید از نام متفاوت استفاده کنید باید نام حقیقی تابع را بعد از کلمه کلیدی Alias بیاورید.
در مثال فوق نام تابع API در فایل DLL ، GetTempPathA و نامی که شما می توانید تابع را در برنامه تان فراخوانی کنید GetTempPath است. توجه داشته با مشخص شدن نام حقیقی تابع از هر نام مجازی که بخواهید می توانید استفاده کیند بنابراین می توانید نام هایی که API Viewer بطور پیش فرض برای توابع در نظر می گیرد را بدلخواه تغییر دهید.
دلایلی که می توان برای برای استفاده از نام متفاوت بر شمرد بر شرح زیر است:
- نام بعضی از توابع با کاراکتر (_) شروع شده است که در ویژوال بیسیک مجاز نیست. بنابراین باید از نام دیگری استفاده کنید.
امکان نام گذاری متفاوت به شما کمک می کند تا از یک شیوه نامگذاری استاندارد و یکپارچه در برنامه تان استفاده کنید و کدهای خوانا تری داشته باشید.
توابع API نسبت به حروف کوچک و بزرگ حساس هستند در حالیکه توابع ویژوال بیسیک اینگونه نیستند. بنابراین می توانید با انتخاب نام جدید Case این توابع را تغییر دهید.
بعضی از توابع API آرگومان هایی دارند که چند نوع متفاوت از داده را می پذیرند. در عبارت Declare این آرگومان ها از نوع Any تعریف می شوند. فراخوانی توابعی که آرگومان های Any دارند می تواند بسیار خطرناک باشد زیرا ویژوال بیسیک صحت این نوع داده ها را چک نمی کندو می تواند داده هایی از نوع غیر مجاز بهتابع ارسال شوند. برای جلوگیری از چنین وضعیتی مس توان چند نسخه از یک تابع DLL ، هر کدام با نام و نوع داده متفاوت تعریف کرد.
API ویندوز از تمام توابع یکه آرگومان رشته (String) می پذیرند دو نسخه دارد: یک نسخه ANSI یک نسخه Unicode. نسخه ANSI با پسوند A (به مثال فوق توجه کنید) و نسخه Unicode با پسوند W تمیز داده می شود. ویژوال بیسیک اگرچه درداخل از Unicode استفاده می کند امام هنگام فراخوانی یک تابع DLL بصورت خودکار تمام رشته را به ANSI تبدیل می کند. بنابراین شما معمولا از نسخه ANSI توابع API ویندوز استفاده خواهید کرد.
API ویندوز بصورت خودکار نام تمام توابعی که آرگومان رشته ای دارند را تغییر می دهد و پسوند ها را از آنها حذف می کند( با استفاده از کلمه کلیدی Alias) .
کلمه کلیدی Lib، فایل DLL را مشخص می کند که تابع در آن قرار دارد. توجه کنید که نام DLL را باید بصورت یک رشته در تعریف Declare بگنجانید. اگر فایل DLL که بعد از Lib مشخص شده در سیستم کاربر پیدا نشود یک خطای زمان _ اجرا با شماره 48 و مضمون "خطا در بارگذاری DLL " رخ خواهد داد. با این اطلاعات و مقدار یکد می توانید با این خطا مقابله کنید.
تابع API کاربردی شماره 1)تعویض زبان صفحه کلید ار انگلیسی به فارسی و بالعکس
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
PWSZKLID : این متغیر رشته 9 رقمی است که کد زبان رو مشخص می کند
Flags : مقدار این متغیر برابر 1 خواهد بود.
کد تبدیل زبان به فارسی داخل Command
(
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
کد تبدیل زبان به انگلیسی داخل Command
کد:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
تا درس بعدی خدانگهدار ....gif)