Windows2003-3790/inetcore/urlmon/astg/asyncapi.cxx
2020-09-30 16:53:55 +02:00

135 lines
2.9 KiB
C++

//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994.
//
// File: asyncapi.cxx
//
// Contents: APIs for async docfiles
//
// Classes:
//
// Functions:
//
// History: 19-Dec-95 PhilipLa Created
//
//----------------------------------------------------------------------------
#include "astghead.cxx"
#pragma hdrstop
#include "asyncapi.hxx"
#include "filllkb.hxx"
#include "filelkb.hxx"
#include "stgwrap.hxx"
#if DBG == 1
DECLARE_INFOLEVEL(astg);
#endif
HRESULT StgOpenAsyncDocfileOnIFillLockBytes( IFillLockBytes *pflb,
DWORD grfMode,
DWORD asyncFlags,
IStorage **ppstgOpen)
{
HRESULT hr;
ILockBytes *pilb;
IStorage *pstg;
hr = pflb->QueryInterface(IID_ILockBytes, (void **)&pilb);
if (FAILED(hr))
{
return hr;
}
hr = StgOpenStorageOnILockBytes(pilb,
NULL,
grfMode,
NULL,
0,
&pstg);
pilb->Release();
if (FAILED(hr))
{
return hr;
}
*ppstgOpen = new CAsyncRootStorage(pstg,(CFillLockBytes *) pflb);
if (*ppstgOpen == NULL)
{
return STG_E_INSUFFICIENTMEMORY;
}
return NOERROR;
}
HRESULT StgGetIFillLockBytesOnILockBytes( ILockBytes *pilb,
IFillLockBytes **ppflb)
{
SCODE sc = S_OK;
CFillLockBytes *pflb = NULL;
pflb = new CFillLockBytes(pilb);
if (pflb == NULL)
{
return STG_E_INSUFFICIENTMEMORY;
}
sc = pflb->Init();
if (FAILED(sc))
{
*ppflb = NULL;
return sc;
}
*ppflb = pflb;
return NOERROR;
}
HRESULT StgGetIFillLockBytesOnFile(OLECHAR const *pwcsName,
IFillLockBytes **ppflb)
{
SCODE sc;
CFileLockBytes *pflb = NULL;
pflb = new CFileLockBytes;
if (pflb == NULL)
{
return STG_E_INSUFFICIENTMEMORY;
}
sc = pflb->Init(pwcsName);
if (SUCCEEDED(sc))
{
sc = StgGetIFillLockBytesOnILockBytes(pflb, ppflb);
}
return sc;
}
#if DBG == 1
HRESULT StgGetDebugFileLockBytes(OLECHAR const *pwcsName, ILockBytes **ppilb)
{
SCODE sc;
CFileLockBytes *pflb;
*ppilb = NULL;
pflb = new CFileLockBytes;
if (pflb == NULL)
{
return STG_E_INSUFFICIENTMEMORY;
}
sc = pflb->Init(pwcsName);
if (FAILED(sc))
{
delete pflb;
pflb = NULL;
}
*ppilb = pflb;
return sc;
}
#endif