kaeziparchivefactory.cpp

来自「zip解压源码.」· C++ 代码 · 共 71 行

CPP
71
字号

#include "stdafx.h"
#include "KAEZipArchive.h"
#include "KAEZipArchiveImplement.h"
#include "KAEZipArchiveComponent.h"
#include "KAEZipArchiveFactory.h"

static unsigned g_uServerLocks = 0;


HRESULT STDMETHODCALLTYPE KAEZipArchiveFactory::CreateInstance(
    /* [unique][in] */ IUnknown __RPC_FAR *pUnkOuter,
    /* [in] */ REFIID riid,
    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject
)
{
    if (pUnkOuter)
        return KSCOM_CLASS_E_NOAGGREGATION;    // E_NO_AGGREGATION
   
    KAEZipArchiveComponent *pKAEZipArchiveComponent = NULL;
    pKAEZipArchiveComponent = new KAEZipArchiveComponent();
    if (!pKAEZipArchiveComponent)
        return KSCOM_E_OUTOFMEMORY;

    KSCOMRESULT kr = pKAEZipArchiveComponent->QueryInterface(riid, ppvObject);

    pKAEZipArchiveComponent->Release();

    return kr;
}
    
HRESULT STDMETHODCALLTYPE KAEZipArchiveFactory::LockServer(
    /* [in] */ BOOL fLock
)
{
    if (fLock)
        g_uServerLocks ++;
    else
        g_uServerLocks --;


    return KSCOM_S_OK;
}

// =========================================================================
// *                 COM Component Implement Public Part                   *
// =========================================================================
HRESULT STDMETHODCALLTYPE KAEZipArchiveFactory::QueryInterface( 
    /* [in] */ REFIID riid,
    /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject)
{
    ASSERT(ppvObject);
    *ppvObject = NULL;

    if (KSCOM_EQUAL_UUID(riid, IID_IUnknown) || 
        KSCOM_EQUAL_UUID(riid, IID_IClassFactory)
    )
    {
        *ppvObject = (void *)this;
    }
    else 
        return KSCOM_E_NOINTERFACE;

    ((IUnknown *)(*ppvObject))->AddRef();

    return KSCOM_S_OK;
}
    


⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?