כמה מטומטם ה־API יכול להיות

ב־יום שישי, 23 בספטמבר 2011, מאת ארתיום; פורסם תחת: תכנה חופשית, פיתוח, תכנה ומחשבים, C++‎‏; ‏3 תגובות

היום בניה לילית נתקעה... מכונה וירטואלית של חלונות לא ירדה.

תוך כדי בירור נכנסתי למכונה וגיליתי חלונית עם הודעה בסגנון:

The library e:\mingw\lib\libsqlite3.dll is not valid windows library. Reinstalling
application may solve the problem

אני מכיר את הבעיה שאם אתה מריץ תוכנה שחסר לה dll אז קופצת חלונית. אפשר להבין התנהגות כזו. רק שבמקרה הספציפי הזה: מדובר בטעינה דינאמית של dll עם LoadLibrary...

אני מצפה שפונקציה תחזיר שגיאה ולא תציג חלון! אחרי חיפוש קצר הגעתי לפונקציה SetErrorMode... שמאפשרת "לפתור" את הבעיה. אבל באמת... אם אין dll אז LoadLibrary יחזיר שגיאה אבל אם ה־dll לא ניתן לטעינה תקפיץ חלון?!?!

מי האידיוט שתכנן את ה־API הזה... בחלום הרע שלי לא הייתי מצפה להתנהגות כזו!

בקיצור: אם אתם לא חייבים אל תפתחו לחלונות!

תגובות

ik, ב־24/09/11 02:29

ארתיום, אתה שוכח משהו כמו 5 דברים אודות ווינדוז:

  1. אין לה מצב טקסטואלי טבעי.
  2. המערכת צריכה לטפל בבעיות שהתכנה שלך לא
  3. התכנון של מרבית ה API שאני זוכר של Windows דווקא דומה עד זהה לעולם הPOSIX עם שינויים קלים בלבד. למשל X11 ו Win32API כמעט זהים במה שהם מספקים כולל בםרמטרים שלהם.
  4. המערכת היא לא מערכת POSIX אמיתית. תפסיק לחשוב בגישה הזו, ותראה איך דברים מסתדרים
  5. בWindows לצרי, יש תאימות טובה יותר ב API ממערכת למערכת מאשר בעולם ה POSIX.

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

אם תבין את הראש של ה API שאתה עובד איתו, והסביבה שאתה נמצא בה, אתה תראה שהשד לא כזה נורא. ואני מדבר כאחד שתכנת פעם בווינדוז. והרבה.

ארתיום, ב־24/09/11 13:08

תראה, עידו, אין לי בעיה אם החלונית הייתה קופצת תמיד או שהיא לא הייתה קופצת אף פעם.

אבל אם אתה קורא לפונקציה LoadLibrary והיא יכולה להחזיר שגיאה, והיא בהחלט מחזירה שגיאה בחלק מהמקרים, כמו למשל ספריה לא נמצא או תלויות שלה לא נמצאו, אז אני מצפה שהיא לא תקפיץ חלון באישזהו מקרה ביזארי!

זה פשוט לא הגיוני אם זה־POSIX או אם זה Win32 API! צריכה להיות תאימות בסיסית הגיונית לגבי מה שנעשה. במיוחד כשמתכנת מצפה ש־LoadLibrary תיכשל...

אורגד, ב־24/09/11 21:00

עידו, אני נוטה לא להסכים איתך.

א. אתה יכול להצביע על עוד API־ים בחלונות שמקפיצים חלונית הודעה (חוץ מ־()MessageBox)? זה דבר מאד נדיר ולא ממש הגיוני.

ב. המקבילה ל־tty או לוג ב־POSIX הוא Event Viewer, ושם הודעות כאלה שייכות.

ג. מי שקורא ל־LoadLibrary בהחלט צריך לטפל בעצמו בשגיאות, זה לא תפקידה של המערכת. המערכת צריכה לטפל בדברים שהם implicit עבור המפתח, כמו לינק לקבצי import של DLL.

הוסף תגובה:

 
 כתובת דוא"ל לא תוצג
 

ניתן לכתוב תגובות עם שימוש בתחביר Markdown.

חובה לאפשר JavaScript כדי להגיב.

דפים

נושאים