windows-nt/Source/XPSP1/NT/inetsrv/query/txtfilt/exports.cxx
2020-09-26 16:20:57 +08:00

125 lines
3.3 KiB
C++

//+-------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1992 - 1994
//
// File: exports.cxx
//
// Contents: Code to export filter and word breaker class factories
//
// History: 15-Aug-1994 SitaramR Created
//
// Notes: Copied from txtifilt.hxx and then modified
//
//--------------------------------------------------------------------------
#include <pch.cxx>
#pragma hdrstop
#include <nullfilt.hxx>
#include <txtifilt.hxx>
#include <defbreak.hxx>
#include <classf.hxx>
#include <cicontrl.hxx>
#include "classid.hxx"
long gulcInstances = 0;
//+-------------------------------------------------------------------------
//
// Function: DllGetClassObject
//
// Synopsis: Ole DLL load class routine
//
// Arguments: [cid] -- Class to load
// [iid] -- Interface to bind to on class object
// [ppvObj] -- Interface pointer returned here
//
// Returns: Text filter or a word breaker class factory
//
// History: 23-Feb-1994 KyleP Created
//
//--------------------------------------------------------------------------
extern "C" SCODE STDMETHODCALLTYPE DllGetClassObject( REFCLSID cid,
REFIID iid,
void ** ppvObj )
{
IUnknown * pResult;
SCODE sc = S_OK;
TRY
{
if ( CLSID_CTextIFilter == cid || CLSID_CTextClass == cid ) {
pResult = (IUnknown *)new CTextIFilterCF;
} else if ( CLSID_CNullIFilter == cid ) {
pResult = (IUnknown *)new CNullIFilterCF;
} else if ( CLSID_Neutral_WBreaker == cid ) {
pResult = (IUnknown *)new CDefWordBreakerCF;
} else if ( guidStorageFilterObject == cid) {
pResult = (IUnknown *) new CStorageFilterObjectCF;
} else if ( guidStorageDocStoreLocatorObject == cid) {
pResult = (IUnknown *) new CStorageDocStoreLocatorObjectCF;
} else if ( clsidCiControl == cid) {
pResult = (IUnknown *) new CCiControlObjectCF;
} else {
ciDebugOut(( DEB_ITRACE, "DllGetClassObject: no such interface found\n" ));
pResult = 0;
sc = E_NOINTERFACE;
}
}
CATCH(CException, e)
{
switch( e.GetErrorCode() )
{
case E_OUTOFMEMORY:
sc = (E_OUTOFMEMORY);
break;
default:
sc = (E_UNEXPECTED);
}
}
END_CATCH;
if (0 != pResult) {
sc = pResult->QueryInterface( iid, ppvObj );
pResult->Release( );
}
return (sc);
}
//+-------------------------------------------------------------------------
//
// Method: DllCanUnloadNow
//
// Synopsis: Notifies DLL to unload (cleanup global resources)
//
// Returns: S_OK if it is acceptable for caller to unload DLL.
//
// History: 23-Feb-1994 KyleP Created
//
//--------------------------------------------------------------------------
extern "C" SCODE STDMETHODCALLTYPE DllCanUnloadNow( void )
{
if ( gulcInstances <= 0 )
return( S_OK );
else
return( S_FALSE );
}