mirror of https://github.com/tongzx/nt5src
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.
176 lines
5.0 KiB
176 lines
5.0 KiB
//+-------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1992 - 1994
|
|
//
|
|
// File: exports.cxx
|
|
//
|
|
// Contents: Code to export word breaker class factories
|
|
//
|
|
// History: 01-July-1996 PatHal Created
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include "pch.cxx"
|
|
#pragma hdrstop
|
|
|
|
#include "classid.hxx"
|
|
#include "wbclassf.hxx"
|
|
#include "stemcf.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
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
extern "C" SCODE STDMETHODCALLTYPE
|
|
DllGetClassObject(
|
|
REFCLSID cid,
|
|
REFIID iid,
|
|
void ** ppvObj )
|
|
{
|
|
IUnknown * pResult = 0;
|
|
SCODE sc = S_OK;
|
|
|
|
__try {
|
|
|
|
switch ( cid.Data1 ) {
|
|
|
|
// Japanese language wordbreaker
|
|
//
|
|
case 0xcd169790:
|
|
if ( cid == CLSID_Japanese_Default_WBreaker ) {
|
|
pResult = (IUnknown *) new CWordBreakerCF(
|
|
MAKELCID( MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT),
|
|
SORT_DEFAULT ));
|
|
sc = pResult->QueryInterface( iid, ppvObj );
|
|
|
|
pResult->Release(); // Release extra refcount from QueryInterface
|
|
}
|
|
else
|
|
sc = E_NOINTERFACE;
|
|
break;
|
|
|
|
// Japanese language stemmer
|
|
//
|
|
case 0xcdbeae30:
|
|
if ( cid == CLSID_Japanese_Default_Stemmer )
|
|
{
|
|
pResult = (IUnknown *) new CStemmerCF(
|
|
MAKELCID( MAKELANGID(LANG_JAPANESE, SUBLANG_DEFAULT),
|
|
SORT_DEFAULT ));
|
|
sc = pResult->QueryInterface( iid, ppvObj );
|
|
|
|
pResult->Release(); // Release extra refcount from QueryInterface
|
|
}
|
|
else
|
|
sc = E_NOINTERFACE;
|
|
break;
|
|
|
|
// Chinese Traditional language wordbreaker
|
|
//
|
|
case 0x954f1760:
|
|
if ( cid == CLSID_Chinese_Traditional_WBreaker )
|
|
{
|
|
pResult = (IUnknown *) new CWordBreakerCF(
|
|
MAKELCID( MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL),
|
|
SORT_DEFAULT ));
|
|
sc = pResult->QueryInterface( iid, ppvObj );
|
|
|
|
pResult->Release(); // Release extra refcount from QueryInterface
|
|
}
|
|
else
|
|
sc = E_NOINTERFACE;
|
|
break;
|
|
|
|
// Chinese Traditional language stemmer
|
|
//
|
|
case 0x969927e0:
|
|
if ( cid == CLSID_Chinese_Traditional_Stemmer )
|
|
{
|
|
pResult = (IUnknown *) new CStemmerCF(
|
|
MAKELCID( MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL),
|
|
SORT_DEFAULT ));
|
|
sc = pResult->QueryInterface( iid, ppvObj );
|
|
|
|
pResult->Release(); // Release extra refcount from QueryInterface
|
|
}
|
|
else
|
|
sc = E_NOINTERFACE;
|
|
break;
|
|
|
|
// Chinese Traditional language wordbreaker
|
|
//
|
|
case 0x9717fc70:
|
|
if ( cid == CLSID_Chinese_Simplified_WBreaker )
|
|
{
|
|
pResult = (IUnknown *) new CWordBreakerCF(
|
|
MAKELCID( MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED),
|
|
SORT_DEFAULT ));
|
|
sc = pResult->QueryInterface( iid, ppvObj );
|
|
|
|
pResult->Release(); // Release extra refcount from QueryInterface
|
|
}
|
|
else
|
|
sc = E_NOINTERFACE;
|
|
break;
|
|
|
|
// Chinese Traditional language stemmer
|
|
//
|
|
case 0x9768f960:
|
|
if ( cid == CLSID_Chinese_Simplified_Stemmer )
|
|
{
|
|
pResult = (IUnknown *) new CStemmerCF(
|
|
MAKELCID( MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED),
|
|
SORT_DEFAULT ));
|
|
sc = pResult->QueryInterface( iid, ppvObj );
|
|
|
|
pResult->Release(); // Release extra refcount from QueryInterface
|
|
}
|
|
else
|
|
sc = E_NOINTERFACE;
|
|
break;
|
|
|
|
default:
|
|
sc = E_NOINTERFACE;
|
|
}
|
|
} __except(1) {
|
|
|
|
if ( pResult )
|
|
pResult->Release();
|
|
|
|
sc = E_UNEXPECTED;
|
|
}
|
|
|
|
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 );
|
|
}
|
|
|