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

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

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

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

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

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

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

    תגובה 1 תגובה אחרונה
    0
    • 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
                                  • דף הבית
                                  • קטגוריות
                                  • פוסטים אחרונים
                                  • משתמשים
                                  • חיפוש
                                  • חוקי הפורום