משיב מוביל
כתיבה של המערכת ל console

שאלה
-
תשובות
-
ודה על התשובה.
בגלל אבטחה אני לא יכולה להעביר את הקוד ולכן אני מנסה לפרט עד כמה שניתן את המקרה (וכנראה שזה לא מספיק...)
אנסה שוב, אולי הפעם זה יספיק,
* כתבתי פרויקט חדש מסוג Console application , הפרויקט הוא משמש כ PROXY בין תוכנה שכתובה ב JAVA לבין פונקציות שנארזו ב DLL
* כאשר התוכנה הזאת עולה אני מעוניינת שיכתב ל console שהתוכנה עלתה ולצורך כך אני משתמשת בשורה:
Console.WriteLine("Start : version 1.0.6");
* לאחר מכן, כאשר מגיעה בקשה לתוכנה הזאת אני מפעילה את אחת מהפונקציות שנארזו מה DLL .
הבעיה היא שבנוסף לפעולה הרצויה של הפונקציה אני רואה שגם נכתבות שורות ל console ואותן אני רוצה להסתיר .
כלומר - את ה console שלי אני רוצה להציג ואת ה console שמגיע מהפונקציה של ה DLL אני רוצה להסתיר.
(זה השערה שלי שיש console.writeLine בפונקציה של ה DLL החיצוני )
לדוגמא שורה שנכתבה ל console ולא נכתבה מהתוכנה שלי:
NetworkClient::Open
Connect completed
pnina
אהלן פנינה,
לפני הכל אני שוב חוזר שכל הדיון כאן ניראה לי אבסורדי לחלטין מכיוון שברור מתוכן ההודעה שמדובר בהודעת שגיאה. לכן מה שצריך לעניין אותך זה לא כיצד להסתיר את ההודעה מה console אלא להבין את השגיאה שנובעת מהקוד של ה DLL כפי הניראה ולתקן אותה!
ועתה נחזור לפעולה של הסתרת ההודעות...
אם הבנתי נכון את הארכיטקטורה של המערכת שלכם, אז את יכולה פשוט להפעיל את מה שאת צריכה מה DLL ב thread נפרד עם GUI נסתר
לפני הרבה מאוד שנים העברתי הרצאה בקבוצת המשתמשים של מייקרוסופט בנושא אשר כולל את הפעולה של הסתרת ה GUI:
https://gallery.technet.microsoft.com/Under-the-hood-of-a-4082e05cבהרצאה הדגמתי כיצד אני יוצר אפליקציה אחת אשר מפעילה מספםר סוגים של GUI שונים. לצורך כך התבססתי על תבנית של פרוייקט Windows Forms. בפרוייקט בילתי את הצגת הטיופס של ברירת המחדל ובמקום זה הוספתי אפשרות להפעיל GUI מסוגים שוניםץ במאמצר הבא שכתבתי אפשר לקרוא יותר על הנושא ואני מאוד ממליץ:
* בתחתית המאמר יש קישור גם להורדה של קוד מלא של הדוגמה
בעקרון צריך לזכור שכאשר את מריצה תהליך כלשהו (process) דרך חלון SHELL אז ההרצה אינה קשורה להצגה של המידע. מדובר בשני שלבים שמבוצעים על ידי התוכנה דרכה אנחנו מריצים את התוכנה. בעזרת המתוגה FreeConsole ניתן לנתק את ההרצה מה GUI (מה Console)
כיוון אחר אולי תוכלי להעזר בקישור הבא (תבדקי את התגודות של Andy Lanng):
https://www.codeproject.com/Questions/897716/Csharp-Read-Text-From-Console-Window-Asynchronousl?cmt=758852#cmt2_897716
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin]
- נערך על-ידי pituachMVP, Moderator יום שני 23 דצמבר 2019 01:57
- הוצע כתשובה על-ידי administrative_account_raOwner יום שני 23 דצמבר 2019 16:29
- סומן כתשובה על-ידי administrative_account_raOwner שבת 11 ינואר 2020 20:26
כל התגובות
-
שלום פנינה,
את מכירה את המשפט שתמונה שווה אלף מילים?
זה תופס לגבי קוד.
כאשר את מנסה לתאר מה יש לך תצרפי את הקוד הרלוונטי כדי שנוכל לראות מה קיים כרגע ואולי אפילו להשתמש בזה כדי לבדוק את ההתנהגות* ישנם מחלקות רבות שאולי חלקן כולל מאפיינים מובנים להגדרה ובלי לראות קוד אנחנו במשחק ניחושים :-)
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin]- נערך על-ידי pituachMVP, Moderator יום חמישי 19 דצמבר 2019 22:18
-
-
-
הי,
אתאר קצת יותר מה אני מנסה לעשות.
אני כותבת ב C# פרויקט console application ומייבאת DLL חיצוני שלצורך הדוגמא נקרא לו test.
הייבוא נעשה באמצעות השורה הבאה:
[DllImport("TEST.dll", CallingConvention = CallingConvention.Cdecl, EntryPoint = "TEST")]static extern int TEST(string test, string context);
בתוכנה שלי יש כתיבות ל console שאני צריכה אולם כאשר אני מפעילה פונקציות של ה DLL אני מקבלת כתיבות לא רצויות ל console
כלומר, הפונקציות של ה DLL כותבות ל console של התוכנה שלי.
האם יש דרך להסתיר רק את ההודעות שנכתבות ל console שמגיעות מהפונקציות של ה DLL
תודה
פנינה
pnina
-
אהלן פנינה,
את שוב מתמקדת בהסברים במקום בנתונים טכניים
זה פורום טכני :-)
> אולי הספרייה של ה DLL מבצעת כתיבה מפני שזה מה שהיא נועדה לעשות?
אם היית נותנת את השם של הספרייה במקום להתמקד בהסבר ארטילאי ושימוש בשם test אז אולי היינו יכולים לחקור את הספרייה ולבדוק מה האפשרויות של ההתנהגות בשימוש בה> את מספרת לנו ש "בתוכנה שלי יש כתיבות ל console" אבל לא מספרת לנו כיצד. באיזה מחלקה של איזה ספרייה את מבצעת את הכתיבה. מה הקוד שלך לביצוע הכתיבה?
מי יודע כרגע... אולי הקוד איתו את כותבת ל console כולל מאפיינים לקבוע מה לכתוב ומה לא לכתוב. אם תראי לנו את הקוד לביצוע הכתיבה אז נוכל לחקור את הספרייה הרלוונטית ואולי גם לבדוק בפועל את ההתנהגות ואת הפתרון* אני רוצה להדגיש שהבעיה מובנת לי (ככל הנראה) כבר מההתחלה. פשוט חסר לנו מידע טכני של מה את עושה בפועל. יש לנו רק תיאור ההתנהגות. את מחפשת פתרון להתנהגות כאשר אין לנו מושג עעל המקור/סיבה להתנהגות. זה כמו להגיע לרופא ולהגיד לו שהבטן ששלך כואבת בלי לספר לו שאכלת 30 סופגניות בתחרות אכילה לפני שעה. נכון... הוא יוכל לבצע בדיקות פיזיות (מה שלנו אין אפשרות בפורום מפני שאין לנו אפשרות להריץ את הקוד שלך) אבל אם תתני לו את הנתון הטכני של למה כואבת לך הבטן (הסופגניות) אז הוא יוכל מייד לתת לך פתרון.
1. אנא צרפי את המידע החסר: קוד שמראה כיצד את כותבת ל Console ושם הספרייה אשר מחזירה את הטקסט הלא נחוץ
2. אם את יכולה לצרף קישור לקובץ zip הכולל דוגמה מלאה (פרוייקט) בסיסית הכוללת רק את שחזור הבעיה אז נוכל גם להריץ את הקוד ולראות את הבעיה
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin] -
בשפת C# הצורה הפשוטה ביותר לכתוב ל Console היא באמצעות המתודות: Console.Write או Console.WriteLine
מתודות אלו לא כוללת אפשרויות סינון וניהול של מה כותבים אלא רק אפשרויות קביעת המקור של מה שרוצים לכתוב וכיצד. אם המתודה מקבלת מה DLL טקסט כלשהו כ input ובקוד שלך את לא מוודאת מה ה input אז המתודה פשוט תכתוב את מה שהעברת לה (שה DLL שהעביר לה).
מניחוש ראשון הבעיה שלך היא קודם כל שאת מקבלת הודעת שגיאה ולא העובדה שההודעה נכתבת ל Console! את צריכה להבין מדוע בכלל מתקבלת ההודעה של השגיאה. ורק בשלב הבא את יכול להסתיר את כך שיש שגיאה על ידי פעולות שונות לפני שאת מעבירה את הנתון למתודה שכותבת את התוצאה.
אל ה console תעביר פרמטר ולא את התשובה ישירות מה DLL. תוסיפי בדיקה לפני הכתיבה ל Console אשר מוודאת שהפרמטר לא כולל מה שהגיע מה DLL. אם יש צורך אז תסנני את הטקסט שאת מעבירה למתודה שכותבת וזהו בעקרון
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin]
- נערך על-ידי pituachMVP, Moderator יום ראשון 22 דצמבר 2019 10:32
-
ודה על התשובה.
בגלל אבטחה אני לא יכולה להעביר את הקוד ולכן אני מנסה לפרט עד כמה שניתן את המקרה (וכנראה שזה לא מספיק...)
אנסה שוב, אולי הפעם זה יספיק,
* כתבתי פרויקט חדש מסוג Console application , הפרויקט הוא משמש כ PROXY בין תוכנה שכתובה ב JAVA לבין פונקציות שנארזו ב DLL
* כאשר התוכנה הזאת עולה אני מעוניינת שיכתב ל console שהתוכנה עלתה ולצורך כך אני משתמשת בשורה:
Console.WriteLine("Start : version 1.0.6");
* לאחר מכן, כאשר מגיעה בקשה לתוכנה הזאת אני מפעילה את אחת מהפונקציות שנארזו מה DLL .
הבעיה היא שבנוסף לפעולה הרצויה של הפונקציה אני רואה שגם נכתבות שורות ל console ואותן אני רוצה להסתיר .
כלומר - את ה console שלי אני רוצה להציג ואת ה console שמגיע מהפונקציה של ה DLL אני רוצה להסתיר.
(זה השערה שלי שיש console.writeLine בפונקציה של ה DLL החיצוני )
לדוגמא שורה שנכתבה ל console ולא נכתבה מהתוכנה שלי:
NetworkClient::Open
Connect completed
pnina
- נערך על-ידי change registry value in visual studio 2008 יום ראשון 22 דצמבר 2019 10:44
-
ודה על התשובה.
בגלל אבטחה אני לא יכולה להעביר את הקוד ולכן אני מנסה לפרט עד כמה שניתן את המקרה (וכנראה שזה לא מספיק...)
אנסה שוב, אולי הפעם זה יספיק,
* כתבתי פרויקט חדש מסוג Console application , הפרויקט הוא משמש כ PROXY בין תוכנה שכתובה ב JAVA לבין פונקציות שנארזו ב DLL
* כאשר התוכנה הזאת עולה אני מעוניינת שיכתב ל console שהתוכנה עלתה ולצורך כך אני משתמשת בשורה:
Console.WriteLine("Start : version 1.0.6");
* לאחר מכן, כאשר מגיעה בקשה לתוכנה הזאת אני מפעילה את אחת מהפונקציות שנארזו מה DLL .
הבעיה היא שבנוסף לפעולה הרצויה של הפונקציה אני רואה שגם נכתבות שורות ל console ואותן אני רוצה להסתיר .
כלומר - את ה console שלי אני רוצה להציג ואת ה console שמגיע מהפונקציה של ה DLL אני רוצה להסתיר.
(זה השערה שלי שיש console.writeLine בפונקציה של ה DLL החיצוני )
לדוגמא שורה שנכתבה ל console ולא נכתבה מהתוכנה שלי:
NetworkClient::Open
Connect completed
pnina
אהלן פנינה,
לפני הכל אני שוב חוזר שכל הדיון כאן ניראה לי אבסורדי לחלטין מכיוון שברור מתוכן ההודעה שמדובר בהודעת שגיאה. לכן מה שצריך לעניין אותך זה לא כיצד להסתיר את ההודעה מה console אלא להבין את השגיאה שנובעת מהקוד של ה DLL כפי הניראה ולתקן אותה!
ועתה נחזור לפעולה של הסתרת ההודעות...
אם הבנתי נכון את הארכיטקטורה של המערכת שלכם, אז את יכולה פשוט להפעיל את מה שאת צריכה מה DLL ב thread נפרד עם GUI נסתר
לפני הרבה מאוד שנים העברתי הרצאה בקבוצת המשתמשים של מייקרוסופט בנושא אשר כולל את הפעולה של הסתרת ה GUI:
https://gallery.technet.microsoft.com/Under-the-hood-of-a-4082e05cבהרצאה הדגמתי כיצד אני יוצר אפליקציה אחת אשר מפעילה מספםר סוגים של GUI שונים. לצורך כך התבססתי על תבנית של פרוייקט Windows Forms. בפרוייקט בילתי את הצגת הטיופס של ברירת המחדל ובמקום זה הוספתי אפשרות להפעיל GUI מסוגים שוניםץ במאמצר הבא שכתבתי אפשר לקרוא יותר על הנושא ואני מאוד ממליץ:
* בתחתית המאמר יש קישור גם להורדה של קוד מלא של הדוגמה
בעקרון צריך לזכור שכאשר את מריצה תהליך כלשהו (process) דרך חלון SHELL אז ההרצה אינה קשורה להצגה של המידע. מדובר בשני שלבים שמבוצעים על ידי התוכנה דרכה אנחנו מריצים את התוכנה. בעזרת המתוגה FreeConsole ניתן לנתק את ההרצה מה GUI (מה Console)
כיוון אחר אולי תוכלי להעזר בקישור הבא (תבדקי את התגודות של Andy Lanng):
https://www.codeproject.com/Questions/897716/Csharp-Read-Text-From-Console-Window-Asynchronousl?cmt=758852#cmt2_897716
Ronen Ariely
[Personal Site] [Blog] [Facebook] [Linkedin]
- נערך על-ידי pituachMVP, Moderator יום שני 23 דצמבר 2019 01:57
- הוצע כתשובה על-ידי administrative_account_raOwner יום שני 23 דצמבר 2019 16:29
- סומן כתשובה על-ידי administrative_account_raOwner שבת 11 ינואר 2020 20:26
-
שלום רונן,
תודה על התשובה- זה ענה לבעיה שהנוצרה לי !
לגבי מה שכתבת , לטפל בשגיאה שחוזרת :
1) התוכנה הזאת משמשת כ PROXY ומעבירה את השגיאות אם יש לתוכנת ה JAVA שמנתחת את המידע ופועלת בהתאם
2) תוכנת ה C# רצה אצל לקוחות ואני לא מעוניית שיקפוץ ללקוח השגיאות ל console . לכן חשוב לי להסתיר אותם.
3) פונקציות ה DLL כותבות גם מידע אינפורמטיבי ל console ולא רק שגיאות ואני לא מעוניינת שיוצגו
4) מידע נצרך נכתב לקובץ לוגים.
שוב תודה על התשובה
פנינה
pnina
-