You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
2.9 KiB
134 lines
2.9 KiB
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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
|