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

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

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

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

מתוזמן נעוץ נעול הועבר ארכיון code613m
22 פוסטים 5 כותבים 1.2k צפיות
  • מהישן לחדש
  • מהחדש לישן
  • הכי הרבה הצבעות
התחברו כדי לפרסם תגובה
נושא זה נמחק. רק משתמשים עם הרשאות מתאימות יוכלו לצפות בו.
  • 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
                            • דף הבית
                            • קטגוריות
                            • פוסטים אחרונים
                            • משתמשים
                            • חיפוש
                            • חוקי הפורום