Share via


Bir için Bellek Ayırma ve Serbest Bırakma BSTR

s oluşturduğunuzda BSTRve bunları COM nesneleri arasında geçirirken, bellek sızıntılarını önlemek için kullandıkları belleğin tedavisine dikkat etmeniz gerekir. Bir BSTR arabirim içinde kaldığında, onunla işiniz bittiğinde belleğini boşaltmanız gerekir. Ancak, bir BSTR arabirimden geçtiğinde, alan nesne bellek yönetiminin sorumluluğunu alır.

Genel olarak, için ayrılan BSTRbelleği ayırma ve serbest bırakma kuralları aşağıdaki gibidir:

  • Bağımsız değişken bekleyen BSTR bir işleve çağırdığınızda, çağrısından önce için belleği BSTR ayırmanız ve daha sonra serbest bırakmanız gerekir. Örnek:

    HRESULT CMyWebBrowser::put_StatusText(BSTR bstr)
    

     

    // shows using the Win32 function 
    // to allocate memory for the string: 
    BSTR bstrStatus = ::SysAllocString(L"Some text");
    if (bstrStatus != NULL)
    {
       pBrowser->put_StatusText(bstrStatus);
       // Free the string:
       ::SysFreeString(bstrStatus);
    }
    
  • döndüren BSTRbir işleve çağırdığınızda dizeyi kendiniz serbest getirmelisiniz. Örnek:

    HRESULT CMyWebBrowser::get_StatusText(BSTR* pbstr)
    

     

    BSTR bstrStatus;
    pBrowser->get_StatusText(&bstrStatus);
    
    // shows using the Win32 function 
    // to free the memory for the string: 
    ::SysFreeString(bstrStatus);
    
  • döndüren bir BSTRişlev uyguladığınızda dizeyi ayırın ancak serbest etmeyin. Alıcı işlevi belleği serbest bırakır. Örneğin:

    HRESULT CMyClass::get_StatusText(BSTR* pbstr)
    {
       try
       {
          //m_str is a CString in your class
          *pbstr = m_str.AllocSysString();
       }
       catch (...)
       {
          return E_OUTOFMEMORY;
       }
    
       // The client is now responsible for freeing pbstr.
       return(S_OK);
    }
    

Ayrıca bkz.

Dizeler (ATL/MFC)
CStringT::AllocSysString
SysAllocString
SysFreeString