API 2

yair24

Member
API 2

שלום, מישהו יכול בבקשה להסביר לי מה זה הסימן | בAPI? למשל כמו בדוגמא שיש בקובץ המצורף מה הכוונה שם בWC.STYLE הוא כאילו שווה לאפשרות הראשונה או לאפשרות השניה או לאפשרות השלישית או לאפשרות הרביעית? יאיר צוות "המפתח לבית הספר"
 

hazgul

New member
זה אומר

שאתה יכול לכתוב שם או את זה או את זה או את זה....
 

nahsh

New member
זה OR של C, לא של API

אתה פשוט עושה OR בין ערכים קבועים, כלומר יוצר ערך חדש בו כל הביטים שדלוקים בערכים ש"מרכיבים" אותו, ידלקו גם בו. בפועל, זה מתפקד לא כ"או" אלא כ"גם", כלומר, לכל אפשרות יש ביטים שאם הם דלוקים, האפשרות מתקיימת.
 

yair24

Member
תודה הבנתי!! ../images/Emo13.gif

עכשיו תגיד לי בבקשה יש לי אפשרות לדעת את הערכים (הם בטח רשומים בHEXA) של כל הקבועים האלה? בטח זה משהו כזה: 0X0001 0X0002 0X0004 0X0008 . . . .0X8000 כן? יאיר צוות "המפתח לבית הספר"
 

nahsh

New member
זה בטוח רשום בקובץ H כלשהו, אבל:

זה פשוט לא חשוב. אין שום סיבה לדעת מהם הערכים האלה - לשם כך יש קבועים. אם אתה ממש סקרן, תעשה חיפוש על כל קבצי הH של WINDOWS, וחפש את שמות הקבועים. העיניין הוא, שיש כ"כ הרבה קבועים כאלה, שאין שום יכולת לעקוב אחריהם או לדעת את ערכם.
 

ihovav

New member
א יכול לדעת לגבי כל אחד בנפרד

אתה יכול לסמן את הערך (לדוגמא : GENERIC_WRITE) - ללחוץ כפתור ימני וללכת ל : Go To Definition Of... - והוא עובר לקובץ ה H שמכיל את הDEFINE - ככה שאתה יכול לדעת את הערך אבל אני לא מכיר מסמך שמכיל את כל הערכים האלו ביחד
 

yair24

Member
רגע אז איך זה עובד?

נגיד שהדלקתי את הביטים בצורה הבאה: 0000111010001101 אז מה יש איזה פונקציה שבודקת איזה ביטים דלוקים בSWITCH-CASE ענקי כזה? יש כאן 2 בחזקת 16 אפשרויות... הייתי אומר שזה SWITCH-CASE ממש ענק... או שלא כל האפשרויות ממומשות? מממ.. בעצם ברור שלא כל האפשרויות ממומשות... השאלה היא זה עובד באמת ככה? עם SWITCH CASE שבודק איזה ביטים דלוקים? יאיר צוות "המפתח לבית הספר"
 

yair24

Member
אה נכון... עשיתי 16 בגלל...

עשיתי 16 ביט בגלל שאני רגיל לעבוד בEMBBEDED ושם בבקר שיש לי אני עובד הרבה עם 8 ביטים ועם 16 ביטים... יאיר צוות "המפתח לבית הספר"
 

The_Mighty_Perr

New member
נדמה לי...

בס"ד שלום יאיר! נדמה לי שהוא לא בודק, האם כל אחת מהאפשרויות(2 בחזקת 32, או כמה שלא יהיו...), אלא בודק באופן הבא: אם ביט 1 דלוק - תעשה כך וכך. בלי קשר לשורה הקודמת- אם ביט 2 דלוק - תעשה כך ורך. בלי קשר לשתי השורות הקודמות - אם ביט 3 דלוק - תעזה כך וכך וככה בודק אם כל 32 הביטים. כמובן שזה לא 100%, אבל מה שקורה אמור להיות דומה לזה. כמו שציינת, זה ממש טיפשי לבדוק את כל האפשרויות, ולבדוק 32 זה לא כל-כך הרבה... על-במך הניסיון שיש לי סביר להניח(לדעתי) שקורה שם משהוא דומה... בברכה... נ.ב. למה אתה טורח לספר לנו שאתה חלק מצוות "הפתח לבית הספר"???
 

albanetc

New member
צודק...

if (winclass.style & CS_DBLCLKS) // i.e. style & CS_DBLCLKS != 0 ; // do something if (winclass.style & CS_OWNDC) ; // do something else​
וכן הלאה... נ.ב. למה אתה טורח לספר לנו שכל דבר שאתה כותב הוא בס"ד?
 

The_Mighty_Perr

New member
לדעתי יש הבדל...

בס"ד זה לא שאני אומר: ´אני דתי ששונא כופרים כמוכם...´
אני אומר ר"ת שלורחים רק 4 בתים...
´צוות "המפתח לבית הספר"´ נשמע קצת יהיר, כמו: ´מפתח בעל תואר שני, 9 שנות ניסיון בפיתוח ל-Win ו-RT...´ בברכה...
 

yair24

Member
אני מצטער אם אני נשמע יהיר

למרות שאני ממש לא יודע מה יהירות פה... כל המטרה היא שאנשים ישמעו את השם הזה כמה שיותר וידעו שאם יש להם שאלה כל שהיא שלא קשורה לשום פורום אז הם יכולים לשאול שם וששם מישהו ממש ינסה למצוא להם תשובה למה אני מתכוון: אני לא מתכוון שפה למשל לא מנסים לענות, פה כן מנסים, אבל אם יש שאלה שלא נענתה זה לא מעניין אף אחד היא פשוט יורדת עד שהיא נעלמת לעומת זאת בפורום של K4SCHOOL (פורום 321 פה בתפוז) יש מישהו שדואג להשאיר את השאלות שלא נתנו עליהם תשובה עם בקשה לתשובה עד שמישהו מהצוות עונה. ושוב אני ממש לא מתכוון להיות יהיר... יאיר צוות "המפתח לבית הספר"
 

ihovav

New member
הוויכוחים והשאלות הקנטרניות האלו

ממש לא במקום אני לא חושב שבס"ד בראש ההודעה באה להביע משהו - אבל זה משום שאני מכיר את הנושא מקרוב - ואני לא חושב שההערה הנגדית היא במקום כל אחד בפורום רשאי לכתוב מה שהוא חושב\רוצה כל עוד זה עונה על הקריטריונים ואני לא חושב שבס"ד או הערה על עיסוקו של אדם היא לא מן הענין הייתי שמח אם היו פה פחות קינטורים הדדיים ויותר פעילות נטו...
 

ke

New member
|

הסימן | הוא bitwise or. כלומר or בין ביטים. עבור שני אופרנדים a,b כאשר לוקחים a | b, מסתכלים על היצוג הבינרי של כ"א מהם (ב 32 ביטים או לפי הגודל), בתוצאה הבינרית במקום ה i יש את or בין הביט ה i של a והביט ה i של b. הרעיון של windows (ולא רק שלהם) הוא שכל bit מייצג אפשרות אחרת, ומה שאתה כותב הוא "מסכה", למשל אם קבוע מסוים מוגדר כ 01000000, אז הוא ידליק את הביט ה2 (תלוי מאיזה כיוון סופרים) . ה 0 לא משפיע כי זה or, ולכן יש כאן רק "הדלקה". אם תכתוב מספר קבועים מופרדים ב|, אזי בכל מקום i שבו היה 1 באחד הקבועים האפשרות הזו תבחר (כמו כן, יתכן כי קבוע יציין הדלקה של מספר אפשרויות). כדי לבדוק עבור משתנה מסוים אם ה bit ה i שלו דלוק עושים לו & עם קבוע שכולו אפסים, והביט ה i הוא 1. (& זה bitwise and) אם התוצאה כולה אפסים, אזי ה ביט הi היה מכובה, ואם לא כולה אפסים אז חייב להיות שהביט ה i דלק (כי ה 0 בקבוע יאפסו את שאר המקומות). ישנם מספר אופרטורי BIT נוספים: ~ )לשלילה) >> << ל shift ו ^ ל xor. ניתןלקרוא עליהם בכל מדריך ל C או manual. בהצלחה. כדי לתרגם מ hex ל בינרי, כל ספרה ב hex מייצגת 4 ביטים בינריים.
 
למעלה