Ich habe folgenden Code, um OLE-Speicher aus dem Puffer zu öffnen. Aber es scheint Speicherverlust zu verursachen. Es verbraucht viel Speicher beim Ausführen.
Ich weiß nicht, wo es undicht ist.C++ Speicherverlust in StgStorage API
int OleCompoundBase::LoadFile(BYTE* buffer, int buffer_len)
{
dwOpenMode = STGM_READ | STGM_SHARE_EXCLUSIVE; // open stream mode
m_pRootStg = NULL;
// Load from buffer
ILockBytes *iLb = NULL;
HRESULT hres = CreateILockBytesOnHGlobal(NULL, true, &iLb);
if (hres == S_OK) {
ULARGE_INTEGER ui;
ui.LowPart = 0;
hres = iLb->WriteAt(ui, buffer, buffer_len, NULL);
if (hres == S_OK) {
hres = StgIsStorageILockBytes(iLb);
if (hres == S_OK) {
hres = StgOpenStorageOnILockBytes(iLb, NULL, STGM_READ | STGM_SHARE_DENY_READ, NULL, 0, &m_pRootStg);
}
}
}
iLb->Release();
return hres;
}
m_pRootStg ist Freisetzung in destructor
Haben Sie versucht, vorbei 'true' als zweites Argument auf [' CreateILockBytesOnHGlobal'] (https://msdn.microsoft.com/en-us/ Bibliothek/Windows/Desktop/aa378977 (v = vs.85) .aspx)? –
versucht. es ist das gleiche – xfr1end