Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Append BStr

Append BStr

Scheduled Pinned Locked Moved C / C++ / MFC
performancealgorithmsdebugginghelpannouncement
27 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • M Mogaambo

    Below is the code to append Bstr, but in debug mode it gives error ' ::SysFreeString(dest); ' and in release mode if i dont write ' ::SysFreeString(dest); ' it corrupts heap. What optimization i do. BSTR StringAppend(const BSTR dest,const BSTR src) { long destLen=::SysStringByteLen(dest); long srcLen=::SysStringByteLen(src); BSTR st3 = ::SysAllocStringByteLen(NULL,destLen+srcLen); try { if(st3==NULL) { throw "Insufficient Memory"; } else { wcscpy(st3, dest); wcscat(st3, src); ::SysFreeString(dest);// here it gives error in debug mode } } catch(char * error) { throw error; } return st3; }

    “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

    M Offline
    M Offline
    Madhu Nair 0
    wrote on last edited by
    #2

    A const BSTR dest ? Why const ?

    1 Reply Last reply
    0
    • M Mogaambo

      Below is the code to append Bstr, but in debug mode it gives error ' ::SysFreeString(dest); ' and in release mode if i dont write ' ::SysFreeString(dest); ' it corrupts heap. What optimization i do. BSTR StringAppend(const BSTR dest,const BSTR src) { long destLen=::SysStringByteLen(dest); long srcLen=::SysStringByteLen(src); BSTR st3 = ::SysAllocStringByteLen(NULL,destLen+srcLen); try { if(st3==NULL) { throw "Insufficient Memory"; } else { wcscpy(st3, dest); wcscat(st3, src); ::SysFreeString(dest);// here it gives error in debug mode } } catch(char * error) { throw error; } return st3; }

      “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

      CPalliniC Offline
      CPalliniC Offline
      CPallini
      wrote on last edited by
      #3

      Why are you freeing dest? :)

      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
      [My articles]

      In testa che avete, signor di Ceprano?

      M 1 Reply Last reply
      0
      • M Mogaambo

        Below is the code to append Bstr, but in debug mode it gives error ' ::SysFreeString(dest); ' and in release mode if i dont write ' ::SysFreeString(dest); ' it corrupts heap. What optimization i do. BSTR StringAppend(const BSTR dest,const BSTR src) { long destLen=::SysStringByteLen(dest); long srcLen=::SysStringByteLen(src); BSTR st3 = ::SysAllocStringByteLen(NULL,destLen+srcLen); try { if(st3==NULL) { throw "Insufficient Memory"; } else { wcscpy(st3, dest); wcscat(st3, src); ::SysFreeString(dest);// here it gives error in debug mode } } catch(char * error) { throw error; } return st3; }

        “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

        _ Offline
        _ Offline
        _Superman_
        wrote on last edited by
        #4

        I recommend CComBSTR::AppendBSTR or _bstr_t::operator+

        «_Superman_» I love work. It gives me something to do between weekends.

        1 Reply Last reply
        0
        • M Mogaambo

          Below is the code to append Bstr, but in debug mode it gives error ' ::SysFreeString(dest); ' and in release mode if i dont write ' ::SysFreeString(dest); ' it corrupts heap. What optimization i do. BSTR StringAppend(const BSTR dest,const BSTR src) { long destLen=::SysStringByteLen(dest); long srcLen=::SysStringByteLen(src); BSTR st3 = ::SysAllocStringByteLen(NULL,destLen+srcLen); try { if(st3==NULL) { throw "Insufficient Memory"; } else { wcscpy(st3, dest); wcscat(st3, src); ::SysFreeString(dest);// here it gives error in debug mode } } catch(char * error) { throw error; } return st3; }

          “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

          K Offline
          K Offline
          KarstenK
          wrote on last edited by
          #5

          why are you modifying a const input parameter ie deleting :mad:

          Press F1 for help or google it. Greetings from Germany

          M 1 Reply Last reply
          0
          • CPalliniC CPallini

            Why are you freeing dest? :)

            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
            [My articles]

            M Offline
            M Offline
            Mogaambo
            wrote on last edited by
            #6

            CPallini wrote:

            Why are you freeing dest?

            Because if i do not free, it gives error that heap is violated in release mode and when i traced down it goes in the NULL condition.

            “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

            CPalliniC 1 Reply Last reply
            0
            • K KarstenK

              why are you modifying a const input parameter ie deleting :mad:

              Press F1 for help or google it. Greetings from Germany

              M Offline
              M Offline
              Mogaambo
              wrote on last edited by
              #7

              KarstenK wrote:

              why are you modifying a const input parameter ie deleting Mad

              if i do not free all the memory gets exhausted.

              “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

              R K 2 Replies Last reply
              0
              • M Mogaambo

                CPallini wrote:

                Why are you freeing dest?

                Because if i do not free, it gives error that heap is violated in release mode and when i traced down it goes in the NULL condition.

                “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                CPalliniC Offline
                CPalliniC Offline
                CPallini
                wrote on last edited by
                #8

                Please show us the calling code. :)

                If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                [My articles]

                In testa che avete, signor di Ceprano?

                M 1 Reply Last reply
                0
                • CPalliniC CPallini

                  Please show us the calling code. :)

                  If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                  This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                  [My articles]

                  M Offline
                  M Offline
                  Mogaambo
                  wrote on last edited by
                  #9

                  Here is my calling code. value variable is of type BSTR BSTR GetNewRow() { value=GetLoggedInUser(); BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n"); value=StringAppend(value,strComma); value=StringAppend(value,strCategory); value=StringAppend(value,strComma); value=StringAppend(value,strItemName); value=StringAppend(value,strComma); value=StringAppend(value,strInstallDate); value=StringAppend(value,strComma); value=StringAppend(value,strVersion); value=StringAppend(value,strComma); value=StringAppend(value,strValue1); value=StringAppend(value,strComma); value=StringAppend(value,strValue2); value=StringAppend(value,strComma); value=StringAppend(value,strValue3); value=StringAppend(value,strNewLine); ::SysFreeString(strComma); ::SysFreeString(strNewLine); return value; }

                  “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                  CPalliniC 1 Reply Last reply
                  0
                  • M Mogaambo

                    KarstenK wrote:

                    why are you modifying a const input parameter ie deleting Mad

                    if i do not free all the memory gets exhausted.

                    “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                    R Offline
                    R Offline
                    Rajesh R Subramanian
                    wrote on last edited by
                    #10

                    If it had to be released from within the function, why does it come into the function as a const parameter? Isn't this strikingly flashy, yelling "Hey look! I'm the silliest!"?

                    It is a crappy thing, but it's life -^ Carlo Pallini

                    1 Reply Last reply
                    0
                    • M Mogaambo

                      KarstenK wrote:

                      why are you modifying a const input parameter ie deleting Mad

                      if i do not free all the memory gets exhausted.

                      “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                      K Offline
                      K Offline
                      KarstenK
                      wrote on last edited by
                      #11

                      To free up the strings is correct and necessary, BUT NOT in a subroutine. Make it after the sub routine call. :doh:

                      Press F1 for help or google it. Greetings from Germany

                      M 1 Reply Last reply
                      0
                      • K KarstenK

                        To free up the strings is correct and necessary, BUT NOT in a subroutine. Make it after the sub routine call. :doh:

                        Press F1 for help or google it. Greetings from Germany

                        M Offline
                        M Offline
                        Mogaambo
                        wrote on last edited by
                        #12

                        This my calling code tell me where do i free BSTR GetNewRow() { value=GetLoggedInUser(); BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n"); value=StringAppend(value,strComma); value=StringAppend(value,strCategory); value=StringAppend(value,strComma); value=StringAppend(value,strItemName); value=StringAppend(value,strComma); value=StringAppend(value,strInstallDate); value=StringAppend(value,strComma); value=StringAppend(value,strVersion); value=StringAppend(value,strComma); value=StringAppend(value,strValue1); value=StringAppend(value,strComma); value=StringAppend(value,strValue2); value=StringAppend(value,strComma); value=StringAppend(value,strValue3); value=StringAppend(value,strNewLine); ::SysFreeString(strComma); ::SysFreeString(strNewLine); return value; }

                        “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                        M K 2 Replies Last reply
                        0
                        • M Mogaambo

                          This my calling code tell me where do i free BSTR GetNewRow() { value=GetLoggedInUser(); BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n"); value=StringAppend(value,strComma); value=StringAppend(value,strCategory); value=StringAppend(value,strComma); value=StringAppend(value,strItemName); value=StringAppend(value,strComma); value=StringAppend(value,strInstallDate); value=StringAppend(value,strComma); value=StringAppend(value,strVersion); value=StringAppend(value,strComma); value=StringAppend(value,strValue1); value=StringAppend(value,strComma); value=StringAppend(value,strValue2); value=StringAppend(value,strComma); value=StringAppend(value,strValue3); value=StringAppend(value,strNewLine); ::SysFreeString(strComma); ::SysFreeString(strNewLine); return value; }

                          “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                          M Offline
                          M Offline
                          Madhu Nair 0
                          wrote on last edited by
                          #13

                          Mogaambo wrote:

                          BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n");

                          What about changing BSTR to _bstr_t ? Defined in comutil.h The MSDN link says that, A _bstr_t object encapsulates the BSTR data type. The class manages resource allocation and deallocation through function calls to SysAllocString and SysFreeString and other BSTR APIs when appropriate. The _bstr_t class uses reference counting to avoid excessive overhead. --++++++--- Use the += operator of _bstr_t to append characters to the end. if value is also declared as a type of _bstr_t then code can be re-written as,

                          value += strComma;
                          value += strNewLine;

                          :thumbsup:

                          modified on Wednesday, May 13, 2009 5:12 AM

                          M 1 Reply Last reply
                          0
                          • M Mogaambo

                            Here is my calling code. value variable is of type BSTR BSTR GetNewRow() { value=GetLoggedInUser(); BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n"); value=StringAppend(value,strComma); value=StringAppend(value,strCategory); value=StringAppend(value,strComma); value=StringAppend(value,strItemName); value=StringAppend(value,strComma); value=StringAppend(value,strInstallDate); value=StringAppend(value,strComma); value=StringAppend(value,strVersion); value=StringAppend(value,strComma); value=StringAppend(value,strValue1); value=StringAppend(value,strComma); value=StringAppend(value,strValue2); value=StringAppend(value,strComma); value=StringAppend(value,strValue3); value=StringAppend(value,strNewLine); ::SysFreeString(strComma); ::SysFreeString(strNewLine); return value; }

                            “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                            CPalliniC Offline
                            CPalliniC Offline
                            CPallini
                            wrote on last edited by
                            #14

                            It looks like the problem is in your bad mixing of char and wchar calls: with the following line

                            BSTR st3 = ::SysAllocStringByteLen(NULL,destLen+srcLen);

                            you're allocating (destLen + srcLen + 1) bytes. while in the following calls

                            wcscpy(st3, dest);
                            wcscat(st3, src);

                            you need, (destLen + srcLen + 2) bytes. :)

                            If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                            This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                            [My articles]

                            In testa che avete, signor di Ceprano?

                            M 1 Reply Last reply
                            0
                            • M Mogaambo

                              This my calling code tell me where do i free BSTR GetNewRow() { value=GetLoggedInUser(); BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n"); value=StringAppend(value,strComma); value=StringAppend(value,strCategory); value=StringAppend(value,strComma); value=StringAppend(value,strItemName); value=StringAppend(value,strComma); value=StringAppend(value,strInstallDate); value=StringAppend(value,strComma); value=StringAppend(value,strVersion); value=StringAppend(value,strComma); value=StringAppend(value,strValue1); value=StringAppend(value,strComma); value=StringAppend(value,strValue2); value=StringAppend(value,strComma); value=StringAppend(value,strValue3); value=StringAppend(value,strNewLine); ::SysFreeString(strComma); ::SysFreeString(strNewLine); return value; }

                              “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                              K Offline
                              K Offline
                              KarstenK
                              wrote on last edited by
                              #15

                              this is very lame code. You better make at first the output string with CString (or otherwise) and at last ::SysAllocString() :rolleyes:

                              Press F1 for help or google it. Greetings from Germany

                              M 1 Reply Last reply
                              0
                              • M Madhu Nair 0

                                Mogaambo wrote:

                                BSTR strComma=::SysAllocString(L","); BSTR strNewLine=::SysAllocString(L"\n");

                                What about changing BSTR to _bstr_t ? Defined in comutil.h The MSDN link says that, A _bstr_t object encapsulates the BSTR data type. The class manages resource allocation and deallocation through function calls to SysAllocString and SysFreeString and other BSTR APIs when appropriate. The _bstr_t class uses reference counting to avoid excessive overhead. --++++++--- Use the += operator of _bstr_t to append characters to the end. if value is also declared as a type of _bstr_t then code can be re-written as,

                                value += strComma;
                                value += strNewLine;

                                :thumbsup:

                                modified on Wednesday, May 13, 2009 5:12 AM

                                M Offline
                                M Offline
                                Mogaambo
                                wrote on last edited by
                                #16

                                Thanks to all programming bees in helping me to solve my problems.

                                “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                                1 Reply Last reply
                                0
                                • CPalliniC CPallini

                                  It looks like the problem is in your bad mixing of char and wchar calls: with the following line

                                  BSTR st3 = ::SysAllocStringByteLen(NULL,destLen+srcLen);

                                  you're allocating (destLen + srcLen + 1) bytes. while in the following calls

                                  wcscpy(st3, dest);
                                  wcscat(st3, src);

                                  you need, (destLen + srcLen + 2) bytes. :)

                                  If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                  This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                  [My articles]

                                  M Offline
                                  M Offline
                                  Mogaambo
                                  wrote on last edited by
                                  #17

                                  Thanks working great now . i don't know the +2 funda , actually i am c# developer but my firm wants me to develop project in c++. ::SysFreeString(dest); can i free this in StringAppend function itself or after my function returns.

                                  “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                                  CPalliniC 1 Reply Last reply
                                  0
                                  • M Mogaambo

                                    Thanks working great now . i don't know the +2 funda , actually i am c# developer but my firm wants me to develop project in c++. ::SysFreeString(dest); can i free this in StringAppend function itself or after my function returns.

                                    “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                                    CPalliniC Offline
                                    CPalliniC Offline
                                    CPallini
                                    wrote on last edited by
                                    #18

                                    Technically you can do it inside. However you probably should revise your design, for instance using a prototype like the following for your function:

                                    HRESULT StringAppend( BSTR * pdst, const BSTR src);

                                    or, better, using, as suggested, the handy _bstr_t wrapper. :)

                                    If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                    This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                    [My articles]

                                    In testa che avete, signor di Ceprano?

                                    M 1 Reply Last reply
                                    0
                                    • CPalliniC CPallini

                                      Technically you can do it inside. However you probably should revise your design, for instance using a prototype like the following for your function:

                                      HRESULT StringAppend( BSTR * pdst, const BSTR src);

                                      or, better, using, as suggested, the handy _bstr_t wrapper. :)

                                      If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                      This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                      [My articles]

                                      M Offline
                                      M Offline
                                      Mogaambo
                                      wrote on last edited by
                                      #19

                                      1. BSTR * pdst why pointer here. BSTR is itself a pointer. 2. What code you have write for StringAppend function ? I want to take some idea from you.It would be very helpful for me.It's a humble request from a programmer to a professional.

                                      “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                                      CPalliniC 1 Reply Last reply
                                      0
                                      • M Mogaambo

                                        1. BSTR * pdst why pointer here. BSTR is itself a pointer. 2. What code you have write for StringAppend function ? I want to take some idea from you.It would be very helpful for me.It's a humble request from a programmer to a professional.

                                        “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                                        CPalliniC Offline
                                        CPalliniC Offline
                                        CPallini
                                        wrote on last edited by
                                        #20

                                        Mogaambo wrote:

                                        1. BSTR * pdst why pointer here. BSTR is itself a pointer.

                                        Because the function will internally change the value of the original pointer, i.e. pdst is a INOUT parameter (this way you state clearly that the function may alter the original dst string).

                                        Mogaambo wrote:

                                        2. What code you have write for StringAppend function ?

                                        Something like

                                        HRESULT StringAppend(BSTR * pdest, const BSTR src)
                                        {
                                        if (pdest == NULL) return E_FAIL;
                                        long destLen=::SysStringLen(*pdest);
                                        long srcLen=::SysStringLen(src);

                                        BSTR tmp = ::SysAllocStringLen(NULL,destLen+srcLen);
                                        if( tmp == NULL) return E_FAIL;
                                        wcscpy(tmp, *pdest);
                                        wcscat(tmp, src);
                                        ::SysFreeString(*pdest);

                                        pdest = &tmp;
                                        *pdest = tmp;
                                        return S_OK;
                                        }

                                        Beware: I didn't check this code (moreover I've used just the very basic E_FAIL failure return value, a good function should be more informative on failure.

                                        If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                        This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                        [My articles]

                                        modified on Wednesday, May 13, 2009 8:02 AM

                                        In testa che avete, signor di Ceprano?

                                        M 1 Reply Last reply
                                        0
                                        • CPalliniC CPallini

                                          Mogaambo wrote:

                                          1. BSTR * pdst why pointer here. BSTR is itself a pointer.

                                          Because the function will internally change the value of the original pointer, i.e. pdst is a INOUT parameter (this way you state clearly that the function may alter the original dst string).

                                          Mogaambo wrote:

                                          2. What code you have write for StringAppend function ?

                                          Something like

                                          HRESULT StringAppend(BSTR * pdest, const BSTR src)
                                          {
                                          if (pdest == NULL) return E_FAIL;
                                          long destLen=::SysStringLen(*pdest);
                                          long srcLen=::SysStringLen(src);

                                          BSTR tmp = ::SysAllocStringLen(NULL,destLen+srcLen);
                                          if( tmp == NULL) return E_FAIL;
                                          wcscpy(tmp, *pdest);
                                          wcscat(tmp, src);
                                          ::SysFreeString(*pdest);

                                          pdest = &tmp;
                                          *pdest = tmp;
                                          return S_OK;
                                          }

                                          Beware: I didn't check this code (moreover I've used just the very basic E_FAIL failure return value, a good function should be more informative on failure.

                                          If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler. -- Alfonso the Wise, 13th Century King of Castile.
                                          This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong. -- Iain Clarke
                                          [My articles]

                                          modified on Wednesday, May 13, 2009 8:02 AM

                                          M Offline
                                          M Offline
                                          Mogaambo
                                          wrote on last edited by
                                          #21

                                          BSTR tmp = ::SysAllocStringLen(NULL,destLen+srcLen); dude you haven't added +2 bytes, it is crashing as that of mine, but when i added +2 it is running fine, so whenever i want allocate BSTR do i have 2 add + bytes. BSTR tmp = ::SysAllocStringLen(NULL,destLen+srcLen+2);

                                          “You will never be a leader unless you first learn to follow and be led.” –Tiorio "Coming together is a beginning, staying together is progress, and working together is success." Henry Ford

                                          CPalliniC 2 Replies Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups