הבהרה /תיקון..

philips

New member
הבהרה /תיקון..

מצורפים לכאן שתי מקורות עם הסברים וטריקים.. 1. לגבי ה CONNECTION...מסכים בהחלט..ואין מה להוסיף הכל כמובן בהתאם לצרכים 2. כנ"ל גם לגבי השאר.. לגבי BYVAL BYREF.....עשיתי כאן איזה שהוא בלבול קטן.. ב VB במילא אי אפשר להעביר דברים גדולים - מערכים וכו´ BYVAL כך שהבעייה שהעלה ANTIDOT..פחות בעייתית.. התשובה הנכונה היא שבמשתנים קטנים עדיף להעביר BYVAL כנורמה תכנותית נכונה (על מנת שלא תשנה את ערכו- ראה קישורים) ואיילו מידע גדול יש בהחלט להעביר BYREF..... וכך אני מתיישר עם דבריו של ANTIDOT ומצרף זר של התנצלויות באם גרמתי לבלבול... קישורho: http://www.aivosto.com/vbtips/vbtips.html http://support.microsoft.com/support/kb/articles/q73/7/98.asp ציטוט מתוך ספר - PRACTICAL STANDARDS FOR MS VB בהוצאת MS .שנת 2000 Pass data ByVal or ByRef, as appropriate. Visual Basic passes data to procedure parameters by reference unless told to do otherwise. When a variable is passed by reference (ByRef) to a parameter of a procedure, the procedure receives a pointer to the original variable. Any subsequent changes made to the parameter are made to the original variable. On the other hand, when a variable is passed by value (ByVal) to a parameter, the procedure receives a copy of the variable. (String variables are an exception to this rule.) Any changes made to the parameter are made only to the copy, and the original variable remains unchanged. One possible standard would be to preface each parameter with ByRef or ByVal. That way you´re explicitly declaring which process to use, and the code is more self-documenting. However, the discipline required to preface every parameter with ByRef or ByVal is great. Another, and definitely easier, solution is to preface a parameter with ByRef only when that parameter will be used to change the value of the original variable (also called the argument). In that case, this practical application would read, "When a parameter is used to change the value of its argument, explicitly declare the parameter as ByRef." Then you can add a comment to the Accepts section of the procedure comment header stating that the parameter is being used as an output parameter—that is, to change the value of its argument. This approach gives you the best of both worlds.
 

philips

New member
מתייחס לשאלות של KERNEL

והגיע לכאן בטעות...
 

The_Mighty_Perr

New member
טוב...

בס"ד מצטער, אבל... אפשר להביר אובייקטים ByVal, אם עושים את השכפול באופן ידני(יש שיטות...) וזה מאוד חשוב כדי שלא יתעסקו אתו מתוך הפונקציה... מצד שני משתנים רגילים אפשר(וצריך, לפעמים) להעביר ByRef, אם אנחנו רוצים שהפונקציה תשנה את ערכם...(ואין פה עניין שם "מנהגים תכנותיים נכונים" - יש עניין של צרכיו של המשתמש). עוד שאלה, אם אתה כזה חכם: מה עדיף? Dim O As New ActiveXComponent.Class או- Dim O As ActiveXComponent.Class Set O = New ActiveXComponent.Class או, אולי- Dim O As Object(Variant/NoType) Set O = CreateObject("ActiveXComponent.Class") קדימה, לעבודה
 

philips

New member
אינך צריך להצטער

אתה צודק בהחלט..... הצרכים התכנותיים קודמים לכל... אבל ככלל על מנת למנוע בלבול שווה להיעזר ב BYVAL במשתנים שאין אנו רוצים שישתנו או שאנו מבצעים עליהם פעולות ולא רוצים שהשינוי יתפוס (עיבוד STRING לדוגמה וכו´...) לכך הייתה הכוונה במנהגים תכנותיים ולא רק אני מאמין בכך...ראה דוגמאות מצורפות.. לא אמרתי שאי אפשר להעביר אובייקטים ב BYVAL...אמרתי שאי אפשר מערכים בצורה ישירה להעביר ב BYVAL... (ואם אמרתי ולא שמתי לב.סליחה) מעולם לא אמרתי שאני כזה חכם....ולא השווצתי בידיעותי או חילקתי לאנשים חידות אתגר... מדוע אתה עושה את זה...? לגבי שאלתך...אם זכרוני אינו מטעני..התשובה אינה כ"כ טריויאלית ולכן אבדוק אותה ברגע שיהיה לי קצת זמן ואשיב לך... לא התעסקתי עם VB כבר הרבה זמן ולכן אינני זוכר בדיוק ..מתי מוקצה זיכרון בכל שלב וכו´...
 

The_Mighty_Perr

New member
אמ.....

בס"ד שלום רב! מצטער שתקפתי אותך כ"כ חזק... אם אני לא טועה, אפשר להביר מערכים ByVal, אבל א"א להעביר אובייקטים ByVal(אני אפרט במוצש"ק...) בברכה...
 

eyalk5

New member
תשובה חלקית

1 עדיף בין 1 ל 2 כי הוא יוצר אתה האובייקט שהוא מראש חדש ככה הוא יוצר קודם את האובייקט רגיל ואז יוצר אותו מחדש חדש
 

The_Mighty_Perr

New member
אמ....

בס"ד כמו שאומרים:"טיפש מחריש - חכם יחשב!" וגם אומרים:"עדיף לשתוק ולהראות כמו טיפש, מלדבר ולהוכיח את זה!" התשובה שלך פשוט לא נכונה! אולי למישהו אחר יש רעיונות??? בברכה...
 

antidot

New member
אנסה רק בשביל שתתקנו אותי

הידע שלי בVB לא משהו אז אסתכל על זה מנקודת מבט של C/C++ 1) אם ההקצאה נכשלת אנחנו נקבל RUN TIME ERROR שלא ניתן לדבג אותו. ז"א אין לנו סיכוי במקרה הזה לתפוס שגיאה במידה ותקרה. 2) נשמע הכי הגיוני. נוצר פויינטר לאובייקט מהסוג הרצוי. ניתן לבדוק אם הצליח. ורק אז מקצים זיכרון לאובייקט. 3) הפוינטר שהוקצה הוא מסוג לא מתאים ולכם תהייה הקצאה מחדש של זיכרון בביצוע הפעולה השניה, מה שמביא אותנו שוב לבעית ERROR HANDLING תיקונים יתקבלו בברכה Antid0t
 
למעלה