דילוג לתוכן
  • דף הבית
  • קטגוריות
  • פוסטים אחרונים
  • משתמשים
  • חיפוש
  • חוקי הפורום
כיווץ
תחומים

תחומים - פורום חרדי מקצועי

💡 רוצה לזכור קריאת שמע בזמן? לחץ כאן!
  1. דף הבית
  2. תכנות
  3. ארכיון code613m
  4. פונקציית StrPtr עושה בעיות ב 64 ביט

פונקציית StrPtr עושה בעיות ב 64 ביט

מתוזמן נעוץ נעול הועבר ארכיון code613m
22 פוסטים 5 כותבים 1.2k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • clickoneC מנותק
    clickoneC מנותק
    clickone
    כתב ב נערך לאחרונה על ידי
    #8

    @magicode

    כנראה זה מה שמותקן לו (לארכיטקט) במחשב.
    אתה רוצה שהוא יתקין 32 רק בשביל זה או אולי מכונה ורטואלית. רק בשביל להחליף utf16 ל utf8 .

    אני לא מאמין שזו הסיבה. (כי אם כן אז הוא מחייב את כלל הלקוחות שלו להיות ב64 ביט ולא נראה לי שזה המצב [יותר אני מאמין שזה הפוך - שיש לו לקוח עם 64 ביט])
    אבל למה רק ארכיטקט? יש כאן בפורום דוגמא למישהו שמתחזק 2 גירסאות 32 ו64...

    פורסם במקור בפורום CODE613 ב12/02/2014 18:23 (+02:00)

    אין טסט כמו פרודקשן.

    המייל שלי urivpn@gmail.com

    תגובה 1 תגובה אחרונה
    0
    • א מנותק
      א מנותק
      ארכיטקט
      כתב ב נערך לאחרונה על ידי
      #9

      @ClickOne

      ארכיטקט, סליחה על הבורות.
      מה הסיבה להשתמש ב64 ביט?
      יותר טוב, או סתם בגלל שזה מה שמותקן אצל הלקוח?
      זה שווה את ניהול 2 הגירסאות? (אפילו שזה לא בקוד אלא בMDE)

      נמאס לי להגיד ללקוחות מה להתקין ומה לא וכולי. מבחינת "ניהול" 2 גירסאות, לא נראה לי שיש כל כך בעיה חוץ מפונקציות API שעושים עם תנאי.
      לפעמים הם מפרמטים את המחשב, ואז הטכנאי מתקין להם אופיס עוד פעם ואז שוב פעם מתקשרים שהתוכנה לא עובדת וכו' אין לי כוח לזה. אז עדיף לי להחזיק 2 גרסאות ברמת הקימפול בלבד וזהו.
      אגב אם מישהו הצליח להבין את המאמרים המצורפים ופשוט להעלות קוד שיפתור את הבעיה, יזכה בפרס שהוא קוד VBA להשלמה אוטומטית של כל הערים והרחובות מדואר ישראל כולל מיקוד חדש בן 7 ספרות...... אם ירצה נתרום את הקוד לקהילה כאן.

      פורסם במקור בפורום CODE613 ב12/02/2014 18:39 (+02:00)

      אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

      תגובה 1 תגובה אחרונה
      1
      • dovidD מנותק
        dovidD מנותק
        dovid ניהול
        כתב ב נערך לאחרונה על ידי
        #10

        ארכיטקט, ניסית את הLongPtr?

        פורסם במקור בפורום CODE613 ב12/02/2014 18:43 (+02:00)

        מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

        בכל נושא אפשר ליצור קשר dovid@tchumim.com

        תגובה 1 תגובה אחרונה
        0
        • א מנותק
          א מנותק
          ארכיטקט
          כתב ב נערך לאחרונה על ידי
          #11

          @דוד ל.ט.

          ארכיטקט, ניסית את הLongPtr?

          אוי ואבוי לי לא הבנתי את התשובה שלך מקודם, ושמתי את הערך במקום הלא נכון!!! עכשיו זה הסתדר ותודה רבה.

          עכשיו נוצרה לי בעיה אחרת בעקבות ההמרה, אבל ככל הנראה לא קשור לאשכול הזה.

          לגבי הפרס תחליט אתה, זאת שאלה מוסרית, מה הדין אם מבטיחים פרס אחרי שכבר מצאו את בן לאדן....... :lol: :lol: :lol: :lol:

          פורסם במקור בפורום CODE613 ב12/02/2014 18:56 (+02:00)

          אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

          תגובה 1 תגובה אחרונה
          0
          • dovidD מנותק
            dovidD מנותק
            dovid ניהול
            כתב ב נערך לאחרונה על ידי
            #12

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

            אל תשכח לסמן את האשכול כפתור.

            פורסם במקור בפורום CODE613 ב12/02/2014 19:02 (+02:00)

            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

            בכל נושא אפשר ליצור קשר dovid@tchumim.com

            תגובה 1 תגובה אחרונה
            3
            • clickoneC מנותק
              clickoneC מנותק
              clickone
              כתב ב נערך לאחרונה על ידי
              #13

              @ארכיטקט

              @ClickOne
              ארכיטקט, סליחה על הבורות.

              מה הסיבה להשתמש ב64 ביט?
              יותר טוב, או סתם בגלל שזה מה שמותקן אצל הלקוח?
              זה שווה את ניהול 2 הגירסאות? (אפילו שזה לא בקוד אלא בMDE)

              נמאס לי להגיד ללקוחות מה להתקין ומה לא וכולי. מבחינת "ניהול" 2 גירסאות, לא נראה לי שיש כל כך בעיה חוץ מפונקציות API שעושים עם תנאי.
              לפעמים הם מפרמטים את המחשב, ואז הטכנאי מתקין להם אופיס עוד פעם ואז שוב פעם מתקשרים שהתוכנה לא עובדת וכו' אין לי כוח לזה. אז עדיף לי להחזיק 2 גרסאות ברמת הקימפול בלבד וזהו.
              אגב אם מישהו הצליח להבין את המאמרים המצורפים ופשוט להעלות קוד שיפתור את הבעיה, יזכה בפרס שהוא קוד VBA להשלמה אוטומטית של כל הערים והרחובות מדואר ישראל כולל מיקוד חדש בן 7 ספרות...... אם ירצה נתרום את הקוד לקהילה כאן.

              הייתי מאד שמח לעזור ולנסות.... (לא ע"מ לקבל פרס :lol: )
              אבל אין לי 64 ביט....
              מה זה קוד השלמה אוטו' של כל הערים וכו?
              אתה מתכוון לזה?
              ובמיקוד לזה?

              אם תרצה, אני ישמח להעלות קובץ רחובות וערים של רשות הדואר, מהתקופה שהוא היה נותן בחינם את מה שחברות אחרות היו מוכרות בכסף <!-- s8-) --><img src="{SMILIES_PATH}/icon_cool.gif" alt="8-)" title="מגניב" /><!-- s8-) --> , שם יש לכל רחוב ויישוב גם את כל ההטיות והשמות הנרדפים שלו. (לדוגמא: פ"ת, פתח תקווה, פתח תקוה) וכו' -- אבל זה קובץ מעט מיושן - עדכני ללפני שנתיים בערך

              עריכה: כבר נפתר.... ברכות לזוכה המאושר!!

              פורסם במקור בפורום CODE613 ב12/02/2014 19:04 (+02:00)

              אין טסט כמו פרודקשן.

              המייל שלי urivpn@gmail.com

              תגובה 1 תגובה אחרונה
              0
              • א מנותק
                א מנותק
                ארכיטקט
                כתב ב נערך לאחרונה על ידי
                #14

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

                Private Const CP_UTF8 = 65001
                #If VBA7 Then
                Private Declare PtrSafe Function WideCharToMultiByte Lib "Kernel32" ( _
                    ByVal CodePage As LongPtr, ByVal dwflags As LongPtr, _
                    ByVal lpWideCharStr As LongPtr, ByVal cchWideChar As LongPtr, _
                    ByVal lpMultiByteStr As LongPtr, ByVal cchMultiByte As LongPtr, _
                    ByVal lpDefaultChar As LongPtr, ByVal lpUsedDefaultChar As LongPtr) As Long
                #Else
                Private Declare Function WideCharToMultiByte Lib "Kernel32" ( _
                    ByVal CodePage As Long, ByVal dwflags As Long, _
                    ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, _
                    ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, _
                    ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
                #End If
                
                Public Function UTF16To8(ByVal UTF16 As String) As String
                
                'עקב שגיאה ב 64 ביט יש להשבית את הפונקציה בשלב זה
                
                Dim lLength As Long
                
                If UTF16 <> "" Then
                    lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UTF16), -1, 0, 0, 0, 0)
                    sBuffer = space$(lLength)
                    lLength = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UTF16), -1, StrPtr(sBuffer), Len(sBuffer), 0, 0)
                    sBuffer = StrConv(sBuffer, vbUnicode)
                    UTF16To8 = Left$(sBuffer, lLength - 1)
                Else
                    UTF16To8 = ""
                End If
                End Function
                
                Public Function URLEncode( _
                   StringVal As String, _
                   Optional SpaceAsPlus As Boolean = False, _
                   Optional UTF8Encode As Boolean = True _
                ) As String
                
                Dim StringValCopy As String: StringValCopy = IIf(UTF8Encode, UTF16To8(StringVal), StringVal)
                Dim StringLen As Long: StringLen = Len(StringValCopy)
                
                If StringLen > 0 Then
                    ReDim result(StringLen) As String
                    Dim i As Long, CharCode As Integer
                    Dim char As String, space As String
                
                  If SpaceAsPlus Then space = "+" Else space = "%20"
                
                  For i = 1 To StringLen
                    char = Mid$(StringValCopy, i, 1)
                    CharCode = Asc(char)
                    Select Case CharCode
                      Case 97 To 122, 65 To 90, 48 To 57, 45, 46, 95, 126
                        result(i) = char
                      Case 32
                        result(i) = space
                      Case 0 To 15
                        result(i) = "%0" & Hex(CharCode)
                      Case Else
                        result(i) = "%" & Hex(CharCode)
                    End Select
                  Next i
                  URLEncode = Join(result, "")
                
                End If
                End Function
                

                אז הפונקציה URLEncode לא מחזירה לי כל ערך.

                @ClickOne

                מה זה קוד השלמה אוטו' של כל הערים וכו?
                אתה מתכוון לזה?

                לא! זה קובץ XML שלוקח לו שבוע לעלות ושוקל המון, אתה צריך להחזיק אותו אצל הלקוח, בקיצור לא יעיל בעליל. אני מדבר על קוד שמתקשר אונליין עם השרת של דואר ישראל, ומושך ממנו מידע של השלמה אוטומטית, של ערים, ולאחר מכן של הרחובות באותה עיר, אבל אני לא ימרה את פיו של מנהל הפורום.

                לגבי עידוד שימוש באקסס, אני מצהיר בזאת שאני משתמש בזה מתוך אילוץ גמור, הואיל ואני כרגע מתפרנס מזה, אבל אני בתהליך של הגירה, יעיד כל כך מג'יקוד...

                בכל אופן אני עדיין לא יכול לסמן את הבעיה כנפתרה, כל עוד הפונקציה URLEncode לא מחזירה לי כל ערך..

                פורסם במקור בפורום CODE613 ב12/02/2014 19:18 (+02:00)

                אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                תגובה 1 תגובה אחרונה
                0
                • dovidD מנותק
                  dovidD מנותק
                  dovid ניהול
                  כתב ב נערך לאחרונה על ידי
                  #15

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

                  פורסם במקור בפורום CODE613 ב12/02/2014 19:32 (+02:00)

                  מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                  בכל נושא אפשר ליצור קשר dovid@tchumim.com

                  תגובה 1 תגובה אחרונה
                  0
                  • רחמיםר מנותק
                    רחמיםר מנותק
                    רחמים מורחק
                    כתב ב נערך לאחרונה על ידי
                    #16

                    @ארכיטקט

                    #If VBA7 Then
                    Private Declare PtrSafe Function WideCharToMultiByte Lib "Kernel32" ( _
                        ByVal CodePage As LongPtr, ByVal dwflags As LongPtr, _
                        ByVal lpWideCharStr As LongPtr, ByVal cchWideChar As LongPtr, _
                        ByVal lpMultiByteStr As LongPtr, ByVal cchMultiByte As LongPtr, _
                        ByVal lpDefaultChar As LongPtr, ByVal lpUsedDefaultChar As LongPtr) As Long

                    לא החלפת את הלונג האחרון ל LongPtr

                    פורסם במקור בפורום CODE613 ב12/02/2014 19:45 (+02:00)

                    תגובה 1 תגובה אחרונה
                    1
                    • רחמיםר מנותק
                      רחמיםר מנותק
                      רחמים מורחק
                      כתב ב נערך לאחרונה על ידי
                      #17

                      ועיין כאן:
                      http://msdn.microsoft.com/en-us/library/office/gg264421.aspx
                      במקטע:
                      Writing code that works on both 32-bit and 64-bit Office

                      פורסם במקור בפורום CODE613 ב12/02/2014 19:50 (+02:00)

                      תגובה 1 תגובה אחרונה
                      1
                      • א מנותק
                        א מנותק
                        ארכיטקט
                        כתב ב נערך לאחרונה על ידי
                        #18

                        @רחמים

                        לא החלפת את הלונג האחרון ל LongPtr

                        החלפתי וזה עושה שגיאה ב: sBuffer = space$(lLength) כי הוא מצפה לערך מסוג Long

                        פורסם במקור בפורום CODE613 ב12/02/2014 20:20 (+02:00)

                        אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                        תגובה 1 תגובה אחרונה
                        0
                        • א מנותק
                          א מנותק
                          ארכיטקט
                          כתב ב נערך לאחרונה על ידי
                          #19

                          תודה רבה לכל המשתתפים :smile: :smile: :smile: :smile:

                          עכשיו הכל עובד מצויין!!! בעיקר דוד ל.ט.

                          לרחמים את הלונג האחרון לא היה צריך באמת להחליף זה היה צעד מיותר, הקוד עובד גם ככה.

                          פורסם במקור בפורום CODE613 ב12/02/2014 20:25 (+02:00)

                          אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                          תגובה 1 תגובה אחרונה
                          1
                          • dovidD מנותק
                            dovidD מנותק
                            dovid ניהול
                            כתב ב נערך לאחרונה על ידי
                            #20

                            @ארכיטקט

                            תודה רבה לכל המשתתפים :smile: :smile: :smile: :smile:

                            עכשיו הכל עובד מצויין!!! בעיקר דוד ל.ט.

                            לרחמים את הלונג האחרון לא היה צריך באמת להחליף זה היה צעד מיותר, הקוד עובד גם ככה.

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

                            פורסם במקור בפורום CODE613 ב12/02/2014 20:28 (+02:00)

                            מנטור אישי למתכנתים (ולא רק) – להתקדם לשלב הבא!

                            בכל נושא אפשר ליצור קשר dovid@tchumim.com

                            תגובה 1 תגובה אחרונה
                            0
                            • א מנותק
                              א מנותק
                              ארכיטקט
                              כתב ב נערך לאחרונה על ידי
                              #21

                              כנראה שסידרת הבדיקות שערכתי לא היו שיטתיות, בסוף מצאתי שעשיתי משהו לא נכון בקוד של הבדיקה, וזה הביא אותי לטעות ולחשוב שהבעיה בקוד היא בפונקציית ה API. אבל כרגע הכל עובד עם הפתרון שלך. ה Long הסופי הוא בסדר, היה צריך להחליף את הטיפוסים רק בתוך הארגומנטים.
                              יכול להיות שמה שכתוב באינטרנט זה נוגע למעשה איפה שאתה מעביר את הערכים לעוד API. אבל אם הערכים מטופלים ב vba זה חוזר להתנהגות רגילה של Long. הסיפור שם קשור לכתובות בזיכרון וסוגי דברים כאלו שממש קשורים לטרחני C++ ולא לאנשים אשר כמונו..... :smile: :smile: :smile:

                              פורסם במקור בפורום CODE613 ב12/02/2014 20:32 (+02:00)

                              אידיאולוגיות גדולות נכנסות למטחנה של עולם המעשה ויוצאות ממנו בפירורים (ווינסטון צ'רצ'יל, סתם סתם, זה שלי)

                              תגובה 1 תגובה אחרונה
                              2
                              • M מנותק
                                M מנותק
                                magicode
                                כתב ב נערך לאחרונה על ידי
                                #22

                                @ארכיטקט

                                הסיפור שם קשור לכתובות בזיכרון וסוגי דברים כאלו שממש קשורים לטרחני C++ ולא לאנשים אשר כמונו..... :smile: :smile: :smile:

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

                                במערכות 32 ביט המספר שמיצג את הכתובת בזיכרון הוא uint32 שזה אומר שהכתובת המקסימלית זה בערך 4 מליארד. ולכן זה הסיבה ש32ביט לא משתמש ביותר מ4 גיגה זיכרון ראם. במערכות 64 הכתובת היא uint64 ולכן צריך לשנות את הטיפוס לזה.

                                פורסם במקור בפורום CODE613 ב12/02/2014 21:15 (+02:00)

                                תגובה 1 תגובה אחרונה
                                4

                                • 1
                                • 2
                                בא תתחבר לדף היומי!
                                • התחברות

                                • אין לך חשבון עדיין? הרשמה

                                • התחברו או הירשמו כדי לחפש.
                                • פוסט ראשון
                                  פוסט אחרון
                                0
                                • דף הבית
                                • קטגוריות
                                • פוסטים אחרונים
                                • משתמשים
                                • חיפוש
                                • חוקי הפורום