הרצת קבצי API בvisual studio c++

Mapisto

New member
הרצת קבצי API בvisual studio c++

איך אני מגדיר את זה כדי שזה יעבוד?
#include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Goodbye, cruel world!", "Note", MB_OK); return 0; }​
 

Mapisto

New member
אני אסביר לך מה עשיתי

יצרתי קובץ win32, כתבתי את הנ"ל הוספתי את stdafx.h והוא לא מקבל (מן הסתם). איך לעזזל אני אגרום לו לקמפל
 

selalerer

New member
ייתכן ולא פתחת את הפרוייקט כWIN32

כאשר אתה יוצר פרוייקט חדש, יש לך בחירה איזה פרוייקט ליצור, cosule application, win32 application, MFC application וכו'. בכדי להריץ קוד כזה אתה צריך שהפרוייקט יהיה Win32 application.
 

Mapisto

New member
כן זה משעשיתי

אבל בבחירה בחרתי blank, בhello world זה גם לא מתקמפל.
 

vinney

Well-known member
אם אתה עושה CONSOLE

ואז שם WINMAIN זה בחיים לא יעבוד, הוא מקושר עם ספריות אחרות ומחפש את הMAIN.
 

selalerer

New member
אם ההHello World לא מתקמפל אז

יש איזשהי בעיה יותר בסיסית מאשר משהו שקשור באפליקציה שלך. איזה טעויות הוא נותן לך כשאתה מנסה לקמפל את הHello World של Win32 application?
 

Mapisto

New member
זה עובד../images/Emo70.gif../images/Emo51.gif

לא, בסוף הייתה לי בעייה אחרת
תודה, עכשיו אני אטריד אותכם בשאלות על API!!
 

Mapisto

New member
אתה תצטער שאמרת את זה ../images/Emo3.gif

אז אני אתן בראש עם שאלה ראשונה:
HINSTANCE hInstance = GetModuleHandle(NULL);​
אז מזה ההנדל הזה -> האם זה כפי שאני חושב מצביע לחלון
אם כן זה מאוד מוזר כי הממ
HWND hwnd;​
אמור להיות המצביע של החלון. אז מה לעזזל ההבדלים?
 

Mapisto

New member
אתה תצטער שאמרת את זה ../images/Emo3.gif

אז אני אתן בראש עם שאלה ראשונה:
HINSTANCE hInstance = GetModuleHandle(NULL);​
אז מזה ההנדל הזה -> האם זה כפי שאני חושב מצביע לחלון
אם כן זה מאוד מוזר כי הממ
HWND hwnd;​
אמור להיות המצביע של החלון. אז מה לעזזל ההבדלים?
 

vinney

Well-known member
של קובץ, איך הגעת לחלון?

כל EXE או DLL או שאר הירקות שמבוצעות בחלונות יש להם מס' מזהה, דהיינו Instance Handle. אתה משתמש בו לכל מיני קריאות של העלאת נתונים/פונקציות וכו מהקבצים הללו.
 

vinney

Well-known member
לא, לא הבנת בסדר

אין שום קשר בין קובץ לחלון.
 

selalerer

New member
או ביותר פירוט (הבטחתי לא?):

HWND משמש לך כמזהה של חלון שהוא למעשה זיכרון שהוקצא ואותחל ע"י פונקציות API ליצירת חלון. HINSTANCE משמש לך כמזהה של הקובץ המורץ עצמו, כלומר התוכנית עצמה מלבד העובדה שמדובר עליה לא על הדיסק אלא אחרי שנטענה לזכרון. כלומר שניהם סוג של מצביעים לזיכרון, אבל המוצבעים הם שני דברים שונים.
 

Mapisto

New member
../images/Emo45.gif Got it

ההנדל הזה משמש אותי להצבעה בטח לא של חלונות אלא גם על פקדים אחרים נכון?
 

selalerer

New member
הHWND יכול לשמש גם להצבעה על

אובייקטים אחרים כי גם הם למעשה בבסיסם חלון עם תכונות נוספות, או תכונות שנקבעו לערך מסויים ולא ניתן לשנות אותן, בדומה מאוד לירושה בOOP אבל זה נעשה בC ולכן לא השתמש במנגנון של C++ לירושה.
 

vinney

Well-known member
כל פקד זה בעצם חלון

כל מה שאתה רואה על המסך מתבסס על חלון עם תוספות כאלה ואחרות, כך שלכל פקד יש את HWND משלו. בתרשים הורשה של MFC אפשר לראות את זה בבירור, כשמחלקת הבסיס היא CWnd.
 

Mapisto

New member
יופי טופי

Hwnd הוא המצביע לחלון (כל פקד = חלון) והאינסטנס הזה הוא איזה מזהה לפקד שהבסיס שלו זה חלון שמוצבע ע"י HWND תודה.
 
למעלה