void allocIMalloc(bool bFree) { IMalloc *imalloc = NULL; HRESULT hr = CoGetMalloc(1, &imalloc); assert(SUCCEEDED(hr)); int* leaked_memory = static_cast<int*>(imalloc->Alloc(34)); if (bFree) { imalloc->Free(leaked_memory); } }
LPITEMIDLIST Pidl_Create(UINT cbSize) { LPITEMIDLIST pidl = NULL; IMalloc* pMalloc; if(FAILED(SHGetMalloc(&pMalloc))) return false; pidl = (LPITEMIDLIST) pMalloc->Alloc(cbSize); if(pidl) ZeroMemory(pidl, cbSize); pMalloc->Release(); return pidl; }
COlePropPage::COlePropPage(CLSID clsidPage, LPUNKNOWN* lpAryUnk, int& count) : CPropertyPage(COlePropPage::IDD), m_clsidPage(clsidPage), m_pObject(lpAryUnk) { // Create COM Property page and get IPropertyPage interface EnableAutomation(); HRESULT hRes = E_FAIL; m_pPropPage=NULL; try { hRes = CoCreateInstance( m_clsidPage, NULL, CLSCTX_INPROC, IID_IPropertyPage, (void**)&m_pPropPage ); if( FAILED( hRes ) ) AfxThrowOleException( hRes ); hRes = m_pPropPage->SetPageSite( (IPropertyPageSite*) GetInterface( &IID_IPropertyPageSite ) ); if( FAILED( hRes ) ) AfxThrowOleException( hRes ); hRes = m_pPropPage->SetObjects( count, m_pObject ); if( FAILED( hRes ) ) AfxThrowOleException( hRes ); IMalloc *pIMalloc; if (FAILED(CoGetMalloc(MEMCTX_TASK, &pIMalloc))) AfxThrowOleException(E_FAIL); PROPPAGEINFO* pPPI = (PROPPAGEINFO*) pIMalloc->Alloc(sizeof(PROPPAGEINFO)); pPPI->cb = sizeof(PROPPAGEINFO); hRes = m_pPropPage->GetPageInfo(pPPI); #ifndef UNICODE m_strCaption.Format("%S", pPPI->pszTitle); #else m_strCaption = pPPI->pszTitle; #endif m_psp.pszTitle = m_strCaption; m_psp.dwFlags |= PSP_USETITLE; m_psp.hIcon = ::LoadIcon(NULL, IDI_QUESTION); pIMalloc->Free(pPPI); pIMalloc->Release(); } catch (COleException * e) { throw (e); } }
// --- HRESULT CCodeGen::ExtractString( UINT id, BYTE** output ) { if ( !output ) return E_INVALIDARG; static char buff[1000]; HINSTANCE inst = _Module.GetModuleInstance(); int len = ::LoadString( inst, id, buff, sizeof(buff) ) + 1; if ( len ) { IMalloc* alloc = 0; HRESULT hr = ::CoGetMalloc( 1, &alloc ); if ( SUCCEEDED(hr) ) { *output = (BYTE*)alloc->Alloc( len ); ::memcpy( *output, buff, len ); alloc->Release(); } return hr; } else return HRESULT_FROM_WIN32( ::GetLastError() ); }
HRESULT C$$Safe_root$$PropPage::GetPageInfo( LPPROPPAGEINFO pPageInfo ) { IMalloc* pIMalloc; if (FAILED( CoGetMalloc( MEMCTX_TASK, &pIMalloc ) )) return E_FAIL; pPageInfo->pszTitle = (LPOLESTR)pIMalloc->Alloc( 256 ); pIMalloc->Release(); if (!pPageInfo->pszTitle) return E_OUTOFMEMORY; static const char szTitle[] = "$$Safe_root$$"; mbstowcs( pPageInfo->pszTitle, szTitle, strlen( szTitle ) ); // Populate the page info structure pPageInfo->cb = sizeof(PROPPAGEINFO); pPageInfo->size.cx = 100; pPageInfo->size.cy = 100; pPageInfo->pszDocString = NULL; pPageInfo->pszHelpFile = NULL; pPageInfo->dwHelpContext= 0; // Create the property page in order to determine its size HWND const hWnd = CreateDialogParam( theApp.m_hInstance, MAKEINTRESOURCE( IDD_PROPPAGE ), ::GetDesktopWindow(), DialogProc, 0 ); if (hWnd) { // Get the dialog size and destroy the window RECT rc; ::GetWindowRect( hWnd, &rc ); pPageInfo->size.cx = rc.right - rc.left; pPageInfo->size.cy = rc.bottom - rc.top; ::DestroyWindow( hWnd ); } return S_OK; }
INT_PTR FileInfViewDlgShow(HINSTANCE hInst, HWND hwndOwner, CFilesInf* pFilesInf) { HRSRC r = FindResource(hInst, MAKEINTRESOURCE(IDD_DLG_FILES_INF), RT_DIALOG); HGLOBAL g = LoadResource(hInst, r); IMalloc *pIMalloc; HRESULT hr = SHGetMalloc(&pIMalloc); if (FAILED(hr)) return 0; FilesInfDlgData* dlgData = (FilesInfDlgData*) pIMalloc->Alloc(sizeof(FilesInfDlgData)); dlgData->filesInf = pFilesInf; INT_PTR ret = DialogBoxIndirectParam(hInst, (LPDLGTEMPLATE)LockResource(g), hwndOwner, (DLGPROC)FileInfViewDlgProc, (LPARAM)dlgData); pIMalloc->Free(dlgData); pIMalloc->Release(); return ret; }