خوب بریم سر اصل مطلب :
اگر در این زمینه کاملا ً مبتدی هستید ، برای اینکه تست کنید که اصلا ً قادر به کامپایل برنامه ی ویندوزی هستید یا نه ، از کد زیر استفاده کنید :
#include <windows.h>
int WINAPI
WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR pszCmdLine, int iCmdShow)
{
MessageBox(NULL,"Hello World!", "First Win App", MB_OK | MB_ICONEXCLAMATION);
return 0;
}
اگر با پیغام خطا مواجه شدید و برنامه بدرستی کامپایل نشد ، سعی کنید خطای بوجود آمده را اصلاح کنید !
( البته مسلما ً این خطا از کد بالا نیست و به احتمال زیاد از کامپایلر شماست همانطور که قبلا ً هم گفتم بعضی از کامپایلر ها مثل Turbo C++ 4.5 در اجرای این کدها ناتوان هستند )
اگر با Warning ای مواجه شدید مبنی براینکه پارامترهای WinMain بدرستی ست نشده اند ، فعلا ً اهمیت ندهید ( البته معمولا ً به Warning ها اهمیت داده نمیشود !)
اگر برنامه شما بدون مشکل کامپایل شد و پیغام Hello World! را دریافت کردید ، خواندن را ادامه دهید ..
توضیح کد :
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance , LPSTR lpCmdLine, int nCmdShow)
تابع ( )WinMain در ویندوز معادل تابع ( )Main است در Dos و Unix . در واقع اینجا جایی است که برنامه شما شروع به اجرا میکند . پارامترهای آن به شرح زیر هستند :
HINSTANCE hInstance : هندلی است به ماژول اجرایی برنامه ( همون فایل .exe که درحافظه در حال اجراست )
HINSTANCE hPrevInstance : برای برنامه های Win32 همیشه Null است .
LPSTR lpCmdLine : آرگومانهای خط فرمان که بعنوان یک رشته ی منفرد هستند . اینها نام برنامه را شامل نمی شوند .
Int nCmdShow : یک مقدار Integer که ممکنه به ShowWindow() پاس داده بشه .. بعدا ً بهش میرسیم .
hInstance برای بارگزاری ریسورس ها ( loading resources ) استفاده میشود و البته هر آنچه که اساس هر ماژول است . یک ماژول میتواند یا یک فایلexe باشد ویا یک فایل dll که در برنامه ی شما لود میشود. برای اکثر برنامه های این نوشته ، فقط یک فایل exe وجود دارد .
hPrevInstance بعنوان هندلی برای نمونه ی قبلی اجرا شده برنامه شما در Win16 استفاده میشود .. در Win32 از آن استفاده نمیشود.
فراخوانی مجمع
WINAPI تعیین کننده فراخوانی همکار است و تحت عنوان _stdcall تعریف میشود .. فعلا ً به معنی و مفهومش کاری نداشته باشید . همین قدر به خاطر بسپارید که در اینجا از آن استفاده شده است .
انواع داده Win32
شما خیلی از کلمات کلیدی را برای انواع داده در ویندوز در اختیار خواهید داشت مثلاً : UINT برای Unsigned int ویا LPSTR برای *char و .. . انتخاب اینکه از کدامیک استفاده شود بستگی به خود شما دارد . اگر از استفاده از *char بجای LPSTR راحت هستید ، از همان استفاده کنید .
فقط یک نکته ی کوچک را فراموش نکنید : پیشوند LP مخفف Long Pointer است . در win32 بخش Long زیاد بکار نمیره و منسوخ شده است .
نکته ی دیگه اینکه حرف C که در ادامه ی LP میاد ، اول کلمه Constant به معنای ثابت هستش ؛ یعنی LPCSTR نشون دهنده ی یک اشاره گر به یک رشته ی ثابت است و LPSTR یک اشاره گر ثابت نیست و قابل تغییر است .
پ.ن. فایل ضمیمه شامل :
1- فرمت Pdf دوبخش اول 2 -سورس برنامه 3- فایل exe
مربوط به همین بخش میباشد .