mirror of
https://git.rtems.org/rtems-libbsd/
synced 2025-06-15 22:12:03 +08:00

The sources can be obtained via: http://opensource.apple.com/tarballs/mDNSResponder/mDNSResponder-544.tar.gz
178 lines
4.6 KiB
C++
178 lines
4.6 KiB
C++
/* -*- Mode: C; tab-width: 4 -*-
|
|
*
|
|
* Copyright (c) 2003-2004 Apple Computer, Inc. All rights reserved.
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#include "StdAfx.h"
|
|
|
|
#include "DebugServices.h"
|
|
|
|
#include "ExplorerBar.h"
|
|
#include "ExplorerPlugin.h"
|
|
|
|
#include "ClassFactory.h"
|
|
|
|
// MFC Debugging
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
//===========================================================================================================================
|
|
// ClassFactory
|
|
//===========================================================================================================================
|
|
|
|
ClassFactory::ClassFactory( CLSID inCLSID )
|
|
{
|
|
mCLSIDObject = inCLSID;
|
|
mRefCount = 1;
|
|
++gDLLRefCount;
|
|
}
|
|
|
|
//===========================================================================================================================
|
|
// ~ClassFactory
|
|
//===========================================================================================================================
|
|
|
|
ClassFactory::~ClassFactory( void )
|
|
{
|
|
check( gDLLRefCount > 0 );
|
|
|
|
--gDLLRefCount;
|
|
}
|
|
|
|
#if 0
|
|
#pragma mark -
|
|
#pragma mark == IUnknown methods ==
|
|
#endif
|
|
|
|
//===========================================================================================================================
|
|
// QueryInterface
|
|
//===========================================================================================================================
|
|
|
|
STDMETHODIMP ClassFactory::QueryInterface( REFIID inID, LPVOID *outResult )
|
|
{
|
|
HRESULT err;
|
|
|
|
check( outResult );
|
|
|
|
if( IsEqualIID( inID, IID_IUnknown ) )
|
|
{
|
|
*outResult = this;
|
|
}
|
|
else if( IsEqualIID( inID, IID_IClassFactory ) )
|
|
{
|
|
*outResult = (IClassFactory *) this;
|
|
}
|
|
else
|
|
{
|
|
*outResult = NULL;
|
|
err = E_NOINTERFACE;
|
|
goto exit;
|
|
}
|
|
|
|
( *( (LPUNKNOWN *) outResult ) )->AddRef();
|
|
err = S_OK;
|
|
|
|
exit:
|
|
return( err );
|
|
}
|
|
|
|
//===========================================================================================================================
|
|
// AddRef
|
|
//===========================================================================================================================
|
|
|
|
STDMETHODIMP_( DWORD ) ClassFactory::AddRef( void )
|
|
{
|
|
return( ++mRefCount );
|
|
}
|
|
|
|
//===========================================================================================================================
|
|
// Release
|
|
//===========================================================================================================================
|
|
|
|
STDMETHODIMP_( DWORD ) ClassFactory::Release( void )
|
|
{
|
|
DWORD count;
|
|
|
|
count = --mRefCount;
|
|
if( count == 0 )
|
|
{
|
|
delete this;
|
|
}
|
|
return( count );
|
|
}
|
|
|
|
#if 0
|
|
#pragma mark -
|
|
#pragma mark == IClassFactory methods ==
|
|
#endif
|
|
|
|
//===========================================================================================================================
|
|
// CreateInstance
|
|
//===========================================================================================================================
|
|
|
|
STDMETHODIMP ClassFactory::CreateInstance( LPUNKNOWN inUnknown, REFIID inID, LPVOID *outObject )
|
|
{
|
|
HRESULT err;
|
|
LPVOID obj;
|
|
|
|
check( outObject );
|
|
|
|
obj = NULL;
|
|
*outObject = NULL;
|
|
require_action( !inUnknown, exit, err = CLASS_E_NOAGGREGATION );
|
|
|
|
// Create the object based on the CLSID.
|
|
|
|
if( IsEqualCLSID( mCLSIDObject, CLSID_ExplorerBar ) )
|
|
{
|
|
try
|
|
{
|
|
obj = new ExplorerBar();
|
|
}
|
|
catch( ... )
|
|
{
|
|
// Don't let exception escape.
|
|
}
|
|
require_action( obj, exit, err = E_OUTOFMEMORY );
|
|
}
|
|
else
|
|
{
|
|
err = E_FAIL;
|
|
goto exit;
|
|
}
|
|
|
|
// Query for the specified interface. Release the factory since QueryInterface retains it.
|
|
|
|
err = ( (LPUNKNOWN ) obj )->QueryInterface( inID, outObject );
|
|
( (LPUNKNOWN ) obj )->Release();
|
|
|
|
exit:
|
|
return( err );
|
|
}
|
|
|
|
//===========================================================================================================================
|
|
// LockServer
|
|
//===========================================================================================================================
|
|
|
|
STDMETHODIMP ClassFactory::LockServer( BOOL inLock )
|
|
{
|
|
DEBUG_UNUSED( inLock );
|
|
|
|
return( E_NOTIMPL );
|
|
}
|