עבור לתוכן

HRESULT בC#

Featured Replies

פורסם

יש דרך לקבל קוד שגיאה משגיאות קיימות ב.NET בדומה לHRESULT בC++?

אני יודע איך לזרוק אחת עם HRESULT אבל בכל הדיפולטיות אני לא מוצא שום פרופרטי או מתודה שמוציאה את זה, אני לא רוצה לפרסר עכשיו 20 אופציות טקסט או להוציא סיפורי סבתא החוצה.

פורסם

מה בדיוק אתה צריך?

בעקרון בתוך המחלקה Exception יש HRESULT אבל הוא protected.

הדרך להשתמש ב-Exceptions ב-C# זה לפי הסוג ולא לפי קוד. אתה פשוט תופס ספציפית את הסוג שאתה מצפה לקבל בבלוק catch נפרד.


// try_catch_ordering_catch_clauses.cs
using System;
class MainClass
{
static void ProcessString(string s)
{
if (s == null)
{
throw new ArgumentNullException();
}
}

static void Main()
{
try
{
string s = null;
ProcessString(s);
}
// Most specific:
catch (ArgumentNullException e)
{
Console.WriteLine("{0} First exception caught.", e);
}
// Least specific:
catch (Exception e)
{
Console.WriteLine("{0} Second exception caught.", e);
}
}
}

אתה יכול לעשות בלוק נפרד לכל סוג כמו שכתוב בדוגמא, מהכי ספציפי להכי כללי, ובכל בלוק אתה מטפל ספציפית בשגיאה שקיבלת. בד"כ אתה תסיים פשוט ב Exception כדי לוודא ששום דבר לא 'יברח' החוצה.

פורסם
  • מחבר

אני יודע את זה, אני שואל אם יש דרך לגשת אליו למרות שהוא protected, ביינתיים מצאתי משהו ערבי זה להמיר את הException שאני מקבל לCOMexception ששם הHRESULT הוא לא protected.

לעבוד עם "סוגים" כל זה נשמע מאוד מאוד יפה אבל כשיש לך קלאסים שלמים שכל מה שהם זורקים זה CryptographicException כשזה יכול להיות 80 דברים שונים זה כבר הופך לחתיכת clusterfuck...

העניין הוא שהHRESULT של אותו Exception שאני רואה בdebugger הוא בדיוק הקוד שגיאה שאני מכיר(.NET מקבל אותו ישירות מCAPI וזה HRresult לכל דבר), וזה מעצבן ברמות שאני לא יכול לגשת אליו, במיוחד בקלאסים שאין להם יותר מסוג או 2 של exceptions...

פורסם
  • מחבר

זה איך להוסיף אחד למשהו שאתה זורק, על העניין שזה חשוף בcomexecption כבר עליתי בעצמי אבל זה דבילי לחלוטין, גועל נפש של דבר פשוט ממש אבל ממש לא מעניין אותי הtype של הexception כאשר כל הקלאסים של MS בד"כ זורקים אותו אחד ל4345425 דברים.

ובמיוחד כאשר אני עובד עם דברים שהם Low level כלומר אם אני עובד עם CAPI אז למשל CSP not found או the cryptographic operation is not valid for provided CSP או כל דבר אחר חוץ מהפניה לnull זורקים לי cryptographic exception, או משהו יותר מעצבן מתודה אחת של קלאס של MS שאמורה לוודא חתימה זורקת cryptographic exception על כל נפילה בתהליך מה שיכול להיות קובץ לא "תקין", checksum לא נכון, תעודה לא נכונה, בעיה בchain, בעיה בCRL, בעיה במכונת קפה. הממשק שלהם מול הDLLים של MS עובד יפה מאוד, הCAPI שולח HRESULT חד ערכי לכל exception, ובdebugger אני רואה את אותו HRESULT, אבל אם אני רוצה לגשת אליו אני לא יכול כי זה protected....

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

פורסם

הדרך היחידה כנראה היא באמת COMExpcetion. בכל מקרה אתה יכול להסתכל כאן: http://www.west-wind.com/weblog/posts/53203.aspx

זה מיושם בצורה די פשוטה ככה שלא צריך להתעסק בהמרה.

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים