בולנט - דברים מיוחדים...

www.ASP.org.il

Israeli ASP Organization
ארגון ה-ASP הישראלי
מאמרים/דוגמאות קוד
קישורים
ספרות
חיפוש כללי:

חפש!
כלליHTMLASPASP.NETSQLמסדי נתוניםJavaScriptXML * XSLDHTML * CSSעיצוב וגרפיקהשרתיםComponentsפרסום ושיווקקידום אתריםקופירייטינגPHP
פרסומת
דף ראשי מדורים דרושים הרשמה למועדון אודותינו צור קשר
מיקום: מאמרים ודוגמאות קוד > ASP
מיקום: מאמרים ודוגמאות קוד > Components

הכללת פונקציות API ברכיבי COM תוך שימוש ב visual b

מאמר זה נועד למתקדמים שכבר יודעים כיצד ליצור רכיבי (ActiveX.Dll) COM ולשלבם בדפי ASP . המאמר ידגים כיצד ליצור רכיבים מורכבים יותר תוך שימוש בפונקציות API. למתחילים אני מציע לקרוא קודם כל את הכתבה "יצירת רכיבי COM בעזרת visual basic" שבאתר זה ולתרגל יצירת רכיבי COM.

מהו API – Application Programming interface?

ניתן להתייחס למערכת ההפעלה כאל אוסף של פונקציות ושירותים אליהם פונים היישומים השונים. למשל פונקציות המטפלות בשמירת קבצים, הצגת גרפיקה למסך, הדפסה ועוד. פונקציות אילו נקראות פונקציות API .בדרך כלל גם כמתכנתים אנו לא פונים ישירות לפונקציות ה API אלא אנו כותבים פקודות שונות בזמן הרצת הקוד מתבצעת קריאה לפונקציות ה API המתאימות , למשל אנו נכתוב את הפקודה PRINT ב VB ובזמן הריצה VB יקרא לפונקצית ה API האחראית להדפסה (או בעצם לסדרה של פונקציות).
ואולם ניתן מסביבות פיתוח התומכות באוטומציה כגון VB C או JAVA לפנות ישירות לפונקציות ה API השונות. היכולת לפנות ישירות ל API פותח בפני המתכנת עולם חדש של יישומים שלא זמינים ישירות מכלי הפתוח הרגיל, יש כיום יותר מ 5,000 פונקציות API זמינות למערכת ההפעלה חלונות 2000 !!!
יצירת תקשורת: PING, DNS, TCP/IP ,בדיקת משאבי המחשב כגון זיכרון ו CPU מדפסות כרטיסי רשת גרפיקה ועוד הם רק חלק מזערי מפונקציות API הזמינות, בעצם אפשר להגיע לכל חלק במערכת ההפעלה לקבל עליו מידע ולהפעיל אותו ( אם יודעים מה וכיצד לחפש).

יישום ה API הראשון שלנו

ביישום הראשון אנו ניצור אוביקט ActiveX DLL נשתמש בפונקצית ה API SLEEP, פונקציה פשוטה זו מקבלת כפרמטר מספר של אלפיות- שניה (M’ seconds) ועוצרת את בצוע התוכנית לאותו פרק זמן (לא להתאכזב פונקציות מרתקות יותר יגיעו בהמשך, בחרתי בפונקציה עקב פשטותה).
נעיין בקוד VB הבא ( אני מניח שאתם יודעים כצד לפתוח פרויקט BV מסוג ActiveX Dll ולהזין לתוכו את הקוד)

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Public Sub stopprog(ByVal TimeMS As Integer) Sleep (TimeMS) End Sub השורה הראשונה בקוד היא הצהרה על פונקצית ה API בשם SLEEP ( הסבר מפורט בהמשך).
בעוד שהפונקציות של VB זמינות תמיד הרי שעל מנת שפונקצית API תהיה זמינה יש להצהיר עליה בתחילת הפרויקט.
לאחר מיכן יצרתי Public Sub בשם stopprog ומתוכו הפעלתי את הפונקציה SLEEP (לאחר ההצהרה היא זמינה כמו כל פונקציה אחרת).
כאשר "נהדר" את קובץ ה DLL נוכל לקרוא לו מ ASP ולהשתמש בשרות (TimeMS) STOPPROG   על מנת לעצור את קוד ה ASP שלנו לכל פרק זמן שנרצה (בשביל מה זה טוב ? נו זו רק דוגמה, למרות שתתפלאו מצאתי לזה שימוש אבל זה כבר למאמר אחר).

אז כיצד ידעתי איך מצהירים על פונקצית ה API ?

קודם כל אם ההצהרה נראת לחלק ממכם לא מובנת זה בגלל שפונקציות ה API נכתבו במקור ב C ולכן למתכנתי VB הם לא תמיד מובנות אולם בגדול אמרתי שאני רוצה לקרוא לפונקציה SLEEP הנמצאת בספריה kernel32 זו ספריה של פונקציות API המטפלות בליבת מערכת ההפעלה.
על מנת להקל עלינו בשימוש בפונקציות API מיקרוסופט מעמידה לשרותינו כלי מיוחד הנקרה API Viewer. היכנס ל VISUAL STUDIO TOOLS שם תמצא את תוכנת API Viewer והפעל אותה. לאחר הפעלת התוכנה הכנס ל file בחר ב load text file… ובחר בקובץ WIN32API זהו קובץ טקסט שמספקת מיקרוסופט ובו כל ההצהרות והמשתנים של פונקציות ה API. בעזרת ה API Viewer אתה יכול לעין בקובץ בנוחות.
בחלון ה API Type בחר ב declares , בחלון ה available items חפש את הפונקציה SLEEP ובחר בה, בחלון declare scope בחר ב private ולחץ על הכפתור ADD, בחלון ה selected item תופעה ההצהרה וכל מה שנותר הוא להעתיק אותה לקוד שלנו. כפי שבודאי ראיתם מיקרוסופט כהרגלה מספקת לנו כלי מאוד עלוב אין אפילו הסבר קצר מה עושה כל פונקציה, מקור מעולה לקבלת אנפורמציה על פונקציות API הוא האתר http://www.allapi.net.
באתר זה תוכלו למצוא הסברים נוספים, דוגמאות קוד ובעיקר שני כלים נהדרים האחד נקרא APIViewer2001 שהוא גירסה מעודכנת של התוכנה של מיקרוסופט ( כן כן מיקרוסופט לא טורחת לעדכן את קובץ ה WIN32API ) והתוכנה השניה שהיא ממש מדהימה נקראת API Guid והיא מאגר של יותר מ 800 פונקציות API עם הסברים ודוגמאות שמתעדכן כל הזמן.
כן וזה חינם וחופשי לחלוטין בתנאי שתשלח להם גלוית תודה – אני שלחתי (- ;
מקור נוסף לדוגמאות הוא האתר http://www.vbapi.com/ref/index.html האתר כבר לא מתעדכן אבל יש בו מאגר גדול של פונקציות ודוגמאות וניתן למצוא בו מציאות
בחלק ב של המאמר נלך צעד נוסף קדימה: תוך שימוש בפונקציות API נבנה רכיב ACTIVEX DLL הבודק כל הזמן מה ניצולת הזיכרון של השרת , לאחר מכן נפעיל אותו מקובץ ASP תוך שאנו מתעדים את העומס על זיכרון המחשב.

בנית רכיב COM ע"י שימוש בפונקצית ה API GlobalMemoryStatus

פונקציה זו מאפשרת לנו לקבל נתונים על הזיכרון הפיזי והוירטואלי של השרת עליו רץ האתר , השתמשתי פעמים רבות בפונקציה זו על מנת ליצור רכיבי COM הבודקים את העומס על השרת (אני משלב גם פונקציות API נוספות הבודקות את ה CPU והתקשורת לשרת על מנת לאתר עומסים חריגים).
נבחן את הקוד הבא (הקוד מצורף גם כקובץ פרויקט VB) :

Option Explicit חלק א הגדרת משתנים Private Type MEMORYSTATUS dwLength As Long dwMemoryLoad As Long dwTotalPhys As Long dwAvailPhys As Long dwTotalPageFile As Long dwAvailPageFile As Long dwTotalVirtual As Long dwAvailVirtual As Long End Type Private memo As MEMORYSTATUS API חלק ב הכרזה על פונקצית ה Private Declare Sub GlobalMemoryStatus Lib "kernel32" _ (lpBuffer As MEMORYSTATUS) חלק ג שימוש בפונקציה Public Function memusedPhys() As String Dim MemoP As Single memo.dwLength = Len(memo) Call GlobalMemoryStatus(memo) MemoP = (memo.dwTotalPhys - memo.dwAvailPhys) / memo.dwTotalPhys memusedPhys = Round(MemoP * 100, 2) & "%" End Function

חילקתי את הקוד לשלושה חלקים

חלק א הגדרת משתנים
חלק ב הכרזה על פונקציה ה API
וחלק ג שימוש בפונקציה
תרשו לי להתחיל דווקא מחלק ב: אנו רואים הצהרה על פונקצית API המזכירה לנו את ההצהרה על הפונקציה SLEEP בה דנו בחלק א של המאמר אולם שימו לב לדבר מעניין:
בתוך הפונקציה נמצא את הקוד הבא lpBuffer As MEMORYSTATUS מה זה?!
ובכן הקוד אומר שהפונקציה משתמשת במשתנה בשם lpBuffer המוגדר כ סוג MEMORYSTATUS, נכון ,כמו שיש משתנה מסוג STRING לאחסון מחרוזות או LONG לאחסון מספרים יש משתנה מסוג MEMORYSTATUS לאחסון הנתונים על זיכרון המחשב. לא מוכר לכם סוג כזה של משתנה? לכן בא חלק א של הקוד ובו הצהרת Type המגדירה את סוג המשתנה MEMORYSTATUS (כאשר הפונקציה נכתבה במקור בשפת C המתכנת יצר את המבנה MEMORYSTATUS ע"י שימוש במשפט מובנה – STRUCT, אנשי VB לא הבנתם לא נורא זה לא כל כך חשוב).

הצהרת TYPE אומרת לנו שמשתנה מסוג MEMORYSTATUS יאחסן 8 מספרים מסוג LONG ובכל אחד נתון אחר על הזיכרון:
נסקור את המשתנים החשובים לנו:
המשתנה dwLength אורך המשתנה MEMORYSTATUS (הסבר בהמשך)
המשתנה dwTotalPhys סה"כ זיכרון פיזי במחשב
המשתנה dwAvailPhys זיכרון פיזי פנוי
המשתנה dwTotalVirtual סה"כ זיכרון וירטואלי במחשב
המשתנה dwAvailVirtual זיכרון וירטואלי פנוי.
חשוב הצהרת ה TYPE חיבת תמיד לבוא לפני ההצהרה על פונקצית ה API !

כיצד נקבל מידע על מבנה סוגי משתנים TYPE ?

כפי שהודגם בחלק א של המאמר על הפונקציה SLEEP, ניתן ע"י שימוש בתוכנה API Viewer לקבל את אופן ההצהרה על פונקציות ה API ובאותו אופן על הפונקציה GlobalMemoryStatus אבל לאחר עיון בקוד נראה שהפונקציה מכילה משתנה מסוג MEMORYSTATUS כיצד ידעתי את מבנה הצהרת ה TYPE שלו? הרי לא מדובר בסוג משתנה סטנדרטי?
אל דאגה API Viewer יש מידע גם על מבנים TYPE של סוגי משתנים. על מנת לקבל את המבנה של המשתנה MEMORYSTATUS יש להפעיל את תוכנת API Viewer ולטעון את קובץ הטקסט WIN32API (כפי שהוסבר בחלק א במאמר הקודם)
בחלון ה API Type בחר ב TYPES !!! , בחלון ה available items חפש את המבנה MEMORYSTATUS ובחר בו, בחלון declare scope בחר ב private ולחץ על הכפתור ADD, בחלון ה selected item תופעה הצהרת הTYPE וכל מה שנותר הוא להעתיק אותה לקוד שלנו, לפני הצהרת ה API אותה מצאנו קודם!!!.
כמובן שבאותו אופן מומלץ בחום להשתמש בשתי התוכנות הנוספות שהצגתי בחלק א במאמר הקודם.
בהמשך חלק א של הקוד שלנו הכרזתי על המשתנה memo כמשתנה מסוג MEMORYSTATUS.

בחלק ג של הקוד יצרתי פונקציה ציבורית בשם() memusedPhys פונקציה זו תיתן את אחוז הזיכרון שבשימוש.
בפונקציה נמצא את שורת הקוד הבאה memo.dwLength = Len(memo) ,שורת קוד זו מגדירה את אורך הסוג MEMO -כ 32 בתים (הסוג MEMORYSTATUS מגדיר 8 מספרים מסוג LONG בני 4 בתים כל אחד) לא הבנתם, ממש ממש לא נורא ההסבר המדויק ארוך ומיגע ולא חשוב, אם נרצה להיות תכליתיים הרי שנוכל לסכם ולומר ששורת קוד זו הכרחית לאתחול המשתנה עבור פונקצית ה API, היא לא משתנה, ותחזור הרבה פעמים גם בפונקציות API אחרות עבור המאפיין dwLength. בשורות הבאות קראתי לפונקציה GlobalMemoryStatus(memo) והצבתי בה את המשתנה memo לאחר מכן השתמשתי במשתנה המכיל את כמות הזיכרון הפיזי הכללי במחשב memo.dwTotalPhys ובמשתנה המכיל את כמות הזיכרון הפיזי הפנוי memo.dwAvailPhys לחישוב אחוז הזיכרון המנוצל, שינוי פורמט לאחוזים וגמרנו.
באותה דרך נוכל לבנות פונקציה המטפלת בזיכרון הוירטואלי של המחשב. פונקציות ציבוריות אלו יהיו זמינות לך מקוד ASP לאחר שתהדר את קובץ ה DLL .

להורדת קובץ ZIP עם הדוגמאות, לחץ כאן

בהצלחה



         

מחבר: אבי סולימןרמת קושי: 3  ||  ציון: (8.55555555555556)כל הזכויות שמורות ל-IAO ©

© כל הזכויות שמורות ל-IAO
Lamparas y Mobiles  |   בולנט - Bolenat סטלן  |   מתכונים  |   הומו גאה  |   שמות  |   מיסטיקה וקבלה  |   Fisherman Pants סדרות טלויזיה טיסות זולות הודו נפאל תאילנד ביקורות משחקי מחשב Engineering Solutions עיצוב גרפי בפלאש לימוד צילומים תמונות ופיתוח קנוורט משאיות ישראל islands & beaches TV Series Guide חגי ישראל play online game clothes wear בניית אתר חנויות מחשבים ו-ציוד הקפי jewish holidays israeli games ישראל אופנה חולצות טישירט מעוצבות הריון לידה תינוק כוסיות ערומות קורס אימון אישי מידע על חברות רשתות ikesound car audio wholesale recetas comidas family and woman magic trip T Shirt mania Bolenat Searches Bolenat UK online video clips חיפושים מגזין מסטול ל-סטלן המצוי Hebrew learning online תכשיטים טבעות שרשראות קליפרים מצתים התפתחות הילד comparte light lamps תרופות / מחלות הדפסה על חולצות למכירה מוזיקה ישראלית תמונות סרטונים מצחיקים גידול צמחים פרחים ישראלים בעולם מתפנקים - ספא פינוק מושלם ייעוץ עסקים משפחתיים סרט קולנוע - קומדיה סאטירה כסף / שוק ההון לימוד שחיה בריכה מפסיקים לעשן סיגריות נשים אישה בחורה בחורות Bongs and Pipes Music Festivals Coca-Cola קססונית