הבלוג של ארתיום
בלוג על לינוקס, תוכנה חופשית, מוזיקה, סלסה, ומה לא!
כמה מטומטם ה־API יכול להיות
היום בניה לילית נתקעה... מכונה וירטואלית של חלונות לא ירדה.
תוך כדי בירור נכנסתי למכונה וגיליתי חלונית עם הודעה בסגנון:
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 הזה... בחלום הרע שלי לא הייתי מצפה להתנהגות כזו!
בקיצור: אם אתם לא חייבים אל תפתחו לחלונות!
תגובות
ארתיום, אתה שוכח משהו כמו 5 דברים אודות ווינדוז:
תבין משהו. כאשר בלינוקס למשל יש חריגה, אתה אולי תראה ב tty כלשהו או בכלל במקור פלט כלשהו את הבעיה. בווינדוז אין את המקור הפלט הזה, ולכן המפלט שלהם זה חלון גרפי.
אם תבין את הראש של ה API שאתה עובד איתו, והסביבה שאתה נמצא בה, אתה תראה שהשד לא כזה נורא. ואני מדבר כאחד שתכנת פעם בווינדוז. והרבה.
תראה, עידו, אין לי בעיה אם החלונית הייתה קופצת תמיד או שהיא לא הייתה קופצת אף פעם.
אבל אם אתה קורא לפונקציה LoadLibrary והיא יכולה להחזיר שגיאה, והיא בהחלט מחזירה שגיאה בחלק מהמקרים, כמו למשל ספריה לא נמצא או תלויות שלה לא נמצאו, אז אני מצפה שהיא לא תקפיץ חלון באישזהו מקרה ביזארי!
זה פשוט לא הגיוני אם זה־POSIX או אם זה Win32 API! צריכה להיות תאימות בסיסית הגיונית לגבי מה שנעשה. במיוחד כשמתכנת מצפה ש־LoadLibrary תיכשל...
עידו, אני נוטה לא להסכים איתך.
א. אתה יכול להצביע על עוד API־ים בחלונות שמקפיצים חלונית הודעה (חוץ מ־()MessageBox)? זה דבר מאד נדיר ולא ממש הגיוני.
ב. המקבילה ל־tty או לוג ב־POSIX הוא Event Viewer, ושם הודעות כאלה שייכות.
ג. מי שקורא ל־LoadLibrary בהחלט צריך לטפל בעצמו בשגיאות, זה לא תפקידה של המערכת. המערכת צריכה לטפל בדברים שהם implicit עבור המפתח, כמו לינק לקבצי import של DLL.
הוסף תגובה:
חובה לאפשר JavaScript כדי להגיב.