API

yair24

Member
API

שלום, התחלתי ללמוד API מהאתר הבא: http://www.winprog.org/tutorial/dialogs.html (זה לינק לשיעור ה5 או ה6 שם אני נמצא בשיעור הזה) בשיעור שאני נמצא עכשיו לומדים איך מוסיפים DIALOG BOX לחלון וזה לא הולך לי!! מי שכתב את האתר הזה אומר שבעזרת הפקודה הזאת פותחים את החלון: DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd, AboutDlgProc); כאשר הפרמטר הרביעי AboutDlgProc הוא בעצם שם של פונקציה שמוגדרת (היא גם כן מופיעה באתר) עכשיו הבעיה שלי היא שכשאני מקמפל את זה אז יש לי ERROR שאומר: C:\Program Files\DevStudio\MyProjects\dlg\dlg.cpp(43) : error C2664: ´DialogBoxParamA´ : cannot convert parameter 4 from ´int (void *,unsigned int,unsigned int,long)´ to ´int (__stdcall *)(void)´ אני מנחש שהפונקציה DialogBoxParam שמקבלת 4 פרמטרים לא מצליחה להפוך את הפרמטר הרביעי (שהוא מצביע לפונקציה?) לINT בגלל שהיא מצפה לקבל שם INT? איפה אני טועה?? אני מצרף פה את הקוד לא חשוב אם הבנתם על מה אני מדבר או לא הבנתם מי שיודע איך אני גורם לזה שלחיצה על HELP ABOUT תפתח לי את הDIALOG BOX של ה-HELP בבקשה שיגיד לי איך תודה מראש יאיר צוות "המפתח לבית הספר"
 

yair24

Member
יש לציין שאני צריך את התשובה....

הזאת ב-API ולא בMFC אני יודע שבMFC רק לוחצים NEXT NEXT NEXT והכל כבר מוכן זה אני כבר יודע עכשיו אני מנסה ללמוד API יאיר
 
אני לא מתכנת C גדול אבל אולי...

לדעתי אתה צריך לעשות CASTING ל AboutDlgProc מפונקציה לפוינטר לפונקציה של חלון. תנסה לכתוב ככה:
DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_ABOUT), hwnd, (DLGPROC) AboutDlgProc);​
DLGPROC זה TYPEDEF של פוינטר לWindow Procedure. מקווה שיעבוד.
 

galh

New member
עובד, אבל לא יפה

הפתרון של casting במקרה הזה אולי עובד אבל זו לא הדרך הטובה. משהו בחזקת "כשר, אבל מסריח". תנסה להצהיר על הפונקציה של הדיאלוג בתחילת הקוד:
BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);​
ואז הקריאה ליצירת הדיאלוג אמורה לעבוד גם בצורה של:
DialogBoxIndirect(NULL, lpDialogTemplate, hWnd, DlgProc);​
 
למעלה