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.
amarok/amarok/src/engine/helix/helix-sp/helix-include/common/include/hxplugn.h

1425 lines
38 KiB

/*
*
* This software is released under the provisions of the GPL version 2.
* see file "COPYING". If that file is not available, the full statement
* of the license can be found at
*
* http://www.fsf.org/licensing/licenses/gpl.txt
*
* Portions Copyright (c) 1995-2004 RealNetworks, Inc. All Rights Reserved.
*
*/
#ifndef _HXPLUGN_H_
#define _HXPLUGN_H_
#include "hxcom.h"
#include "hxplugncompat.h"
/*
* Forward declarations of some interfaces defined or used here-in.
*/
typedef _INTERFACE IUnknown IUnknown;
typedef _INTERFACE IHXPlugin IHXPlugin;
typedef _INTERFACE IHXPluginEnumerator IHXPluginEnumerator;
// $Private:
typedef _INTERFACE IHXPluginSearchEnumerator IHXPluginSearchEnumerator;
typedef _INTERFACE IHXPluginChallenger IHXPluginChallenger;
// $EndPrivate.
typedef _INTERFACE IHXBuffer IHXBuffer;
typedef _INTERFACE IHXValues IHXValues;
typedef _INTERFACE IHXPreferences IHXPreferences;
// Plugin Types.
#define PLUGIN_FILESYSTEM_TYPE "PLUGIN_FILE_SYSTEM"
#define PLUGIN_FILEFORMAT_TYPE "PLUGIN_FILE_FORMAT"
#define PLUGIN_FILEWRITER_TYPE "PLUGIN_FILE_WRITER"
#define PLUGIN_METAFILEFORMAT_TYPE "PLUGIN_METAFILE_FORMAT"
#define PLUGIN_RENDERER_TYPE "PLUGIN_RENDERER"
#define PLUGIN_DEPACKER_TYPE "PLUGIN_DEPACKER"
#define PLUGIN_REVERTER_TYPE "PLUGIN_REVERTER"
#define PLUGIN_BROADCAST_TYPE "PLUGIN_BROADCAST"
#define PLUGIN_STREAM_DESC_TYPE "PLUGIN_STREAM_DESC"
#define PLUGIN_ALLOWANCE_TYPE "PLUGIN_ALLOWANCE"
#define PLUGIN_PAC_TYPE "PLUGIN_PAC"
#define PLUGIN_CLASS_FACTORY_TYPE "PLUGIN_CLASS_FACT"
#define PLUGIN_CLASS "PluginType"
#define PLUGIN_FILENAME "PluginFilename"
#define PLUGIN_REGKEY_ROOT "PluginHandlerData"
#define PLUGIN_PLUGININFO "PluginInfo"
#define PLUGIN_GUIDINFO "GUIDInfo"
#define PLUGIN_NONHXINFO "NonHXDLLs"
#define PLUGIN_IDENTIFIER "Plugin#"
// This may no longer be needed...
#define PLUGINDIRECTORYHASH "DirHash"
// XXXAH WHO is defining this ... I think I know..
#define PLUGIN_DESCRIPTION2 "Description"
// XXXAH WHO is defining this ... I think I know..
#define PLUGIN_FILE_HASH "FileHash"
#define PLUGIN_INDEX "IndexNumber"
#define PLUGIN_FILENAMES "FileInfo"
#define PLUGIN_COPYRIGHT2 "Copyright"
#define PLUGIN_LOADMULTIPLE "LoadMultiple"
#define PLUGIN_VERSION "Version"
#define PLUGIN_FILESYSTEMSHORT "FileShort"
#define PLUGIN_FILESYSTEMPROTOCOL "FileProtocol"
#define PLUGIN_FILEMIMETYPES "FileMime"
#define PLUGIN_FILEEXTENSIONS "FileExtensions"
#define PLUGIN_FILEOPENNAMES "FileOpenNames"
#define PLUGIN_RENDERER_MIME "RendererMime"
#define PLUGIN_RENDERER_GRANULARITY "Renderer_Granularity"
#define PLUGIN_DEPACKER_MIME "DepackerMime"
#define PLUGIN_REVERTER_MIME "ReverterMime"
#define PLUGIN_BROADCASTTYPE "BroadcastType"
#define PLUGIN_STREAMDESCRIPTION "StreamDescription"
//
#define PLUGIN_GUID_RESPONSE "MainGuid"
#define PLUGIN_FACTORY_GUIDS "" // These are comma delimited.
//
#define PLUGIN_NUM_PLUGINS "NumPlugins"
#define PLUGIN_FILE_CHECKSUM "DLLCheckSum"
#define PLUGIN_DLL_SIZE "DLLSize"
#define PLUGIN_HAS_FACTORY "DLLHasFactory"
/****************************************************************************
*
* Function:
*
* HXCreateInstance()
*
* Purpose:
*
* Function implemented by all plugin DLL's to create an instance of
* any of the objects supported by the DLL. This method is similar to
* Window's CoCreateInstance() in its purpose, except that it only
* creates objects from this plugin DLL.
*
* NOTE: Aggregation is never used. Therefore an outer unknown is
* not passed to this function, and you do not need to code for this
* situation.
*
*/
#ifdef _MAC_CFM
#pragma export on
#endif
STDAPI HXCreateInstance
(
IUnknown** /*OUT*/ ppIUnknown
);
#ifdef _MAC_CFM
#pragma export off
#endif
/****************************************************************************
*
* Function:
*
* HXShutdown()
*
* Purpose:
*
* Function implemented by all plugin DLL's to free any *global*
* resources. This method is called just before the DLL is unloaded.
*
*/
#ifdef _MAC_CFM
#pragma export on
#endif
STDAPI HXShutdown(void);
#ifdef _MAC_CFM
#pragma export off
#endif
/****************************************************************************
*
* Interface:
*
* IHXPlugin
*
* Purpose:
*
* Interface exposed by a plugin DLL to allow inspection of objects
* supported by the plugin DLL.
*
* IID_IHXPlugin:
*
* {00000C00-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXPlugin, 0x00000C00, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPlugin
DECLARE_INTERFACE_(IHXPlugin, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPlugin methods
*/
/************************************************************************
* Method:
* IHXPlugin::GetPluginInfo
* Purpose:
* Returns the basic information about this plugin. Including:
*
* bMultipleLoad Whether or not this plugin can be instantiated
* multiple times. All File Formats must set
* this value to TRUE. The only other type of
* plugin that can specify bMultipleLoad=TRUE is
* a filesystem plugin. Any plugin that sets
* this flag to TRUE must not use global variables
* of any type.
*
* Setting this flag to TRUE implies that you
* accept that your plugin may be instantiated
* multiple times (possibly in different
* address spaces). Plugins are instantiated
* multiple times only in the server (for
* performance reasons).
*
* An example of a plugin, that must set this
* flag to FALSE is a filesystem plugin that
* uses a single TCP connection to communicate
* with a database.
*
* pDescription which is used in about UIs (can be NULL)
* pCopyright which is used in about UIs (can be NULL)
* pMoreInfoURL which is used in about UIs (can be NULL)
* ulVersionNumber The version of this plugin.
*/
STDTQT_METHOD(GetPluginInfo) (THIS_
REF(HXBOOL) /*OUT*/ bMultipleLoad,
REF(const char*) /*OUT*/ pDescription,
REF(const char*) /*OUT*/ pCopyright,
REF(const char*) /*OUT*/ pMoreInfoURL,
REF(ULONG32) /*OUT*/ ulVersionNumber) PURE;
/************************************************************************
* Method:
* IHXPlugin::InitPlugin
* Purpose:
* Initializes the plugin for use. This interface must always be
* called before any other method is called. This is primarily needed
* so that the plugin can have access to the context for creation of
* IHXBuffers and IMalloc.
*/
STDTQT_METHOD(InitPlugin) (THIS_
IUnknown* /*IN*/ pContext) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXPluginEnumerator
*
* Purpose:
*
* provide methods to enumerate through all the plugins installed
*
* IID_IHXPluginEnumerator:
*
* {00000C01-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXPluginEnumerator, 0x00000C01, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPluginEnumerator
DECLARE_INTERFACE_(IHXPluginEnumerator, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPluginEnumerator methods
*/
/************************************************************************
* Method:
* IHXPluginEnumerator::GetNumOfPlugins
*
* Purpose:
* return the number of plugins available
*
*/
STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
/************************************************************************
* Method:
* IHXPluginEnumerator::GetPlugin
* Purpose:
* Return an instance (IUnknown) of the plugin
*
*/
STDTQT_METHOD(GetPlugin) (THIS_
ULONG32 /*IN*/ ulIndex,
REF(IUnknown*) /*OUT*/ pPlugin) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXPluginGroupEnumerator
*
* Purpose:
*
* Provide a way to enumerate through all of the plugins which
* implement a specific interface.
*
* IID_IHXPluginGroupEnumerator:
*
* {00000C02-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXPluginGroupEnumerator, 0x00000C02, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPluginGroupEnumerator
#define CLSID_IHXPluginGroupEnumerator IID_IHXPluginGroupEnumerator
DECLARE_INTERFACE_(IHXPluginGroupEnumerator, IUnknown)
{
/*
* IUnknown methods
*/
/*
* IHXPluginGroupEnumerator methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/******************************************************************
* Method:
* IHXPluginGroupEnumerator::Init
*
* Purpose:
* tell the group enumerator which interface to group the plugins
* into, this method must be called before the other methods can
* be called.
*
*/
STDTQT_METHOD(Init) (THIS_
REFIID iid) PURE;
/******************************************************************
* Method:
* IHXPluginGroupEnumerator::GetNumOfPlugins
*
* Purpose:
* return the number of plugins available that support a
* particular interface.
*
*/
STDMETHOD_(ULONG32,GetNumOfPlugins) (THIS) PURE;
/******************************************************************
* Method:
* IHXPluginGroupEnumerator::GetPlugin
* Purpose:
* Return an instance (IUnknown) of the plugin
*
*/
STDTQT_METHOD(GetPlugin) (THIS_
UINT32 /*IN*/ ulIndex,
REF(IUnknown*) /*OUT*/ pPlugin) PURE;
};
// $Private:
/****************************************************************************
*
* Interface:
*
* IHXPluginSearchEnumerator
*
* Purpose:
* Walk through the result set of a plugin search
*
* {3244B391-42D4-11d4-9503-00902790299C}
*
*/
DEFINE_GUID( IID_IHXPluginSearchEnumerator,
0x3244b391, 0x42d4, 0x11d4, 0x95, 0x3, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
#undef INTERFACE
#define INTERFACE IHXPluginSearchEnumerator
DECLARE_INTERFACE_( IHXPluginSearchEnumerator, IUnknown )
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface)(THIS_ REFIID riid, void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef)(THIS) PURE;
STDMETHOD_(ULONG32,Release)(THIS) PURE;
/*
* IHXPluginSearchEnumerator methods
*/
/************************************************************************
* Method:
* IHXPluginSearchEnumerator::GetNumPlugins
*
* Purpose:
* Returns numbers of plugins found during search
*
*/
STDMETHOD_( UINT32, GetNumPlugins)(THIS) PURE;
/************************************************************************
* Method:
* IHXPluginSearchEnumerator::GoHead
*
* Purpose:
* Moves the iterator to the beginning of the collection
*
*/
STDMETHOD_(void, GoHead)(THIS) PURE;
/************************************************************************
* Method:
* IHXPluginSearchEnumerator::GetNextPlugin
*
* Purpose:
* Returns an instance of the next plugin in the collection
*
*/
STDTQT_METHOD(GetNextPlugin)( THIS_ REF(IUnknown*) pIUnkResult,
IUnknown* pIUnkOuter ) PURE;
/************************************************************************
* Method:
* IHXPluginSearchEnumerator::GetNextPluginInfo
*
* Purpose:
* Gets information about the next plugin in the list
*
*/
STDTQT_METHOD(GetNextPluginInfo)( THIS_ REF(IHXValues*) pRetValues ) PURE;
/************************************************************************
* Method:
* IHXPluginSearchEnumerator::GetPluginAt
*
* Purpose:
* Returns an instance of a plugin at a specific index in the list
*
*/
STDTQT_METHOD(GetPluginAt)( THIS_ UINT32 index,
REF(IUnknown*) pIUnkResult,
IUnknown* pIUnkOuter ) PURE;
/************************************************************************
* Method:
* IHXPluginSearchEnumerator::
*
* Purpose:
* Returns information about a plugin at a specific index in the list
*
*/
STDTQT_METHOD(GetPluginInfoAt)( THIS_ UINT32 index,
REF(IHXValues*) pRetValues ) PURE;
};
// $EndPrivate.
/****************************************************************************
*
* Interface:
*
* IHXPluginReloader
*
* Purpose:
*
* Tells the client core to reload all plugins.
*
* IID_IHXPluginReloader:
*
* {00000C03-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXPluginReloader, 0x00000C03, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPluginReloader
DECLARE_INTERFACE_(IHXPluginReloader, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPluginReloader methods
*/
/************************************************************************
* Method:
* IHXPluginReloader::ReloadPlugins
* Purpose:
* Causes the client core to reload all plugins.
*
*/
STDTQT_METHOD(ReloadPlugins) (THIS) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXPluginFactory
*
* Purpose:
*
* This interface is implemented by a plugin in order to have more then
* one "RMA plugin" in a single DLL. I.e., a plugin author could
* use this interface to have 3 different file format plugins in
* a single DLL.
*
* IID_IHXPluginFactory:
*
* {00000C04-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXPluginFactory, 0x00000C04, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPluginFactory
DECLARE_INTERFACE_(IHXPluginFactory, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPluginFactory methods
*/
/*****************************************************************
* Method:
* IHXPluginFactory::GetNumPlugins
* Purpose:
* Report the number of Plugins within the DLL.
*
* Parameters:
*/
STDMETHOD_(UINT16, GetNumPlugins) (THIS) PURE;
/*****************************************************************
* Method:
* IHXPluginFactory::GetPlugin
* Purpose:
* Returns an IUnknown interface to the requested plugin.
*
* Parameters:
*/
STDTQT_METHOD(GetPlugin) (THIS_
UINT16 uIndex,
IUnknown** pPlugin) PURE;
};
// $Private:
/****************************************************************************
*
* Interface:
*
* IHXPluginChallenger
*
* Purpose:
*
* This interface is implemented by a plugin in order to allow
* verification of a plugin's authenticity, by issuing a challenge
* and receiving a challenge response.
*
* IID_IHXPluginChallenger:
*
* {00000C05-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXPluginChallenger, 0x00000C05, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPluginChallenger
typedef struct _HXTimeval HXTimeval;
DECLARE_INTERFACE_(IHXPluginChallenger, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPluginChallenger methods
*/
/*****************************************************************
* Method:
* IHXPluginChallenger::Challenge
* Purpose:
* Challenge the plugin's authenticity. Returns a challenge
* response which the caller can use to verify that the
* plugin is authentic.
*
* Parameters:
* tVal A time value which may be used to create the
* challenge response.
*/
STDTQT_METHOD(Challenge) (THIS_
HXTimeval /*IN*/ tVal,
REF(IHXBuffer*) /*OUT*/ pResponse) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXPluginQuery
*
* Purpose:
*
* Queries the plugin handler for information on plugins.
*
* IID_IHXPluginQuery:
*
* {00000C06-0901-11d1-8B06-00A024406D59}
*
*/
#define PLUGIN_FILE_PATH "PluginFilePath"
#define PLUGIN_PATH "PlgPath"
#define PLUGIN_DESCRIPTION "PlgDesc"
#define PLUGIN_COPYRIGHT "PlgCopy"
#define PLUGIN_MOREINFO "PlgMore"
#define PLUGIN_MIMETYPES "PlgMime"
#define PLUGIN_EXTENSIONS "PlgExt"
#define PLUGIN_OPENNAME "PlgOpen"
#define PLUGIN_MULTIPLE "PlgMult"
DEFINE_GUID(IID_IHXPluginQuery, 0x00000C06, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXPluginQuery
DECLARE_INTERFACE_(IHXPluginQuery, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPluginQuery methods
*/
/************************************************************************
* Method:
* IHXPluginQuery::GetNumPluginsGivenGroup
*
* Purpose:
* Gets the number of plugins associated with a particular class id.
*
*/
STDTQT_METHOD(GetNumPluginsGivenGroup) (THIS_ REFIID riid,
REF(UINT32) /*OUT*/ unNumPlugins) PURE;
/************************************************************************
* Method:
* IHXPluginQuery::GetPluginInfo
*
* Purpose:
* Gets the info of a particular plugin.
*
*/
STDTQT_METHOD(GetPluginInfo) (THIS_ REFIID riid,
UINT32 unIndex, REF(IHXValues*) /*OUT*/ Values) PURE;
};
// $EndPrivate.
/****************************************************************************
*
* Interface:
*
* IHXGenericPlugin
*
* Purpose:
*
* Interface exposed by a plugin DLL to inform the client / server core
* that your plugin wishes to have InitPlugin called immediately.
*
* IID_IHXGenericPlugin:
*
* {00000C09-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXGenericPlugin, 0x00000C09, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXGenericPlugin
DECLARE_INTERFACE_(IHXGenericPlugin, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXGenericPlugin methods
*/
STDTQT_METHOD(IsGeneric) (THIS_
REF(HXBOOL) /*OUT*/ bIsGeneric) PURE;
};
DEFINE_GUID(IID_IHXPluginHandler, 0x00000200, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
DEFINE_GUID(IID_IHXPlugin2Handler, 0x00000201, 0xb4c8, 0x11d0, 0x99, 0x95, 0x0, 0xa0, 0x24, 0x8d, 0xa5, 0xf0);
#undef INTERFACE
#define INTERFACE IHXPlugin2Handler
DECLARE_INTERFACE_(IHXPlugin2Handler, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXPlugin2Handler Methods
*/
/************************************************************************
* Method:
* IHXPlugin2Handler::Init
*
* Purpose:
* Specifies the context and sets the pluginhandler in motion.
*
*/
STDTQT_METHOD(Init) (THIS_ IUnknown* pContext) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::GetNumPlugins2
*
* Purpose:
* Gets the info of a particular plugin.
*
*/
STDMETHOD_(ULONG32,GetNumOfPlugins2) (THIS) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::GetPluginInfo
*
* Purpose:
* Gets the info of a particular plugin.
*
*/
STDTQT_METHOD(GetPluginInfo) (THIS_
UINT32 unIndex,
REF(IHXValues*) /*OUT*/ Values) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::FlushCache()
*
* Purpose:
* Flushes the LRU cache -- Unloads all DLLs from memory
* which currenltly have a refcount of 0.
*/
STDTQT_METHOD(FlushCache) (THIS) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::SetCacheSize
*
* Purpose:
* This function sets the size of the Cache. The cache is
* initally set to 1000KB. To disable the cache simply set
* the size to 0.If the cache is disabled a DLL will be
* unloaded whenever it's refcount becomes zero. Which MAY
* cause performance problems.
*/
STDTQT_METHOD(SetCacheSize) (THIS_ ULONG32 nSizeKB) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::GetInstance
*
* Purpose:
*
* This function will return a plugin instance given a plugin index.
*
*/
STDTQT_METHOD(GetInstance) (THIS_ UINT32 index, REF(IUnknown*) pUnknown) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::FindIndexUsingValues
*
* Purpose:
* Finds a plugin which matches the set of values given. An index
* is returned which can be used to either get the values (using
* GetPluginInfo) or an instance can be created using GetPluing().
*
*/
STDTQT_METHOD(FindIndexUsingValues) (THIS_ IHXValues*,
REF(UINT32) unIndex) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::FindPluginUsingValues
*
* Purpose:
* Finds a plugin which matches the set of values given. A Plugin
* instance is returned.
*
*/
STDTQT_METHOD(FindPluginUsingValues) (THIS_ IHXValues*,
REF(IUnknown*) pUnk) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::FindIndexUsingStrings
*
* Purpose:
* Finds a plugin which matches the set of values given. An index
* is returned which can be used to either get the values (using
* GetPluginInfo) or an instance can be created using GetPluing().
* NOTE: that a max of two values may be given.
*/
STDTQT_METHOD(FindIndexUsingStrings) (THIS_ char* PropName1,
char* PropVal1,
char* PropName2,
char* PropVal2,
char* PropName3,
char* PropVal3,
REF(UINT32) unIndex) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::FindPluginUsingStrings
*
* Purpose:
* Finds a plugin which matches the set of values given. A Plugin
* instance is returned.
* NOTE: that a max of two values may be given.
*/
STDTQT_METHOD(FindPluginUsingStrings) (THIS_ char* PropName1,
char* PropVal1,
char* PropName2,
char* PropVal2,
char* PropName3,
char* PropVal3,
REF(IUnknown*) pUnk) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::FindImplementationFromClassID
*
* Purpose:
* Finds a CommonClassFactory plugin which supports the
* ClassID given. An instance of the Class is returned.
*/
STDTQT_METHOD(FindImplementationFromClassID)
(
THIS_
REFGUID GUIDClassID,
REF(IUnknown*) pIUnknownInstance
) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::Close
*
* Purpose:
* A function which performs all of the functions of delete.
*
*
*/
STDTQT_METHOD(Close) (THIS) PURE;
/************************************************************************
* Method:
* IHXPlugin2Handler::SetRequiredPlugins
*
* Purpose:
* This function sets the required plugin list
*
*
*/
STDTQT_METHOD(SetRequiredPlugins) (THIS_ const char** ppszRequiredPlugins) PURE;
};
// $Private:
/****************************************************************************
*
* Interface:
*
* IHXPluginHandler3
*
* Purpose:
*
* Extensions to the IHXPlugin2Handler so we can interact with the
* Gemini Object Broker
*
* IID_IHXPluginHandler3:
*
* {32B19771-2299-11d4-9503-00902790299C}
*
*/
DEFINE_GUID( IID_IHXPluginHandler3, 0x32b19771, 0x2299, 0x11d4, 0x95, 0x3, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
#undef INTERFACE
#define INTERFACE IHXPluginHandler3
DECLARE_INTERFACE_(IHXPluginHandler3, IUnknown)
{
/************************************************************************
* Method:
* IHXPluginHandler3::RegisterContext
*
* Purpose:
* Sets up the context without loading any plugin info
*
*/
STDTQT_METHOD( RegisterContext )( THIS_ IUnknown* pContext ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::AddPluginMountPoint
*
* Purpose:
* Sets up the plugins stored in this preferences object
*
*/
STDTQT_METHOD( AddPluginMountPoint )( THIS_ const char* pName, UINT32 majorVersion,
UINT32 minorVersion, IHXBuffer* pPath ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::RefreshPluginMountPoint
*
* Purpose:
* Refreshes plugin information associated with this
* preferences object
*/
STDTQT_METHOD( RefreshPluginMountPoint )( THIS_ const char* pName ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::RemovePluginMountPoint
*
* Purpose:
* Removes plugins associated with this preferences object
*/
STDTQT_METHOD( RemovePluginMountPoint )( THIS_ const char* pName ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::FindImplementationFromClassID
*
* Purpose:
* Finds a CommonClassFactory plugin which supports the
* ClassID given. An instance of the Class is returned.
* The plugin instance is initialized with the specified
* context
*/
STDTQT_METHOD( FindImplementationFromClassID )( THIS_ REFGUID GUIDClassID,
REF(IUnknown*) pIUnknownInstance, IUnknown* pIUnkOuter, IUnknown* pContext ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::FindCLSIDFromName
*
* Purpose:
*
* Maps a text name to a CLSID based on information from
* component plugins
*/
STDTQT_METHOD( FindCLSIDFromName )( THIS_ const char* pName, REF(IHXBuffer*) pCLSID ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::FindGroupOfPluginsUsingValues
*
* Purpose:
* Builds a collection of plugins that match the criteria
*
*/
STDTQT_METHOD(FindGroupOfPluginsUsingValues)(THIS_ IHXValues* pValues,
REF(IHXPluginSearchEnumerator*) pIEnumerator) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::FindGroupOfPluginsUsingStrings
*
* Purpose:
* Builds a collection of plugins that match the criteria
*
*/
STDTQT_METHOD(FindGroupOfPluginsUsingStrings)(THIS_ char* PropName1,
char* PropVal1,
char* PropName2,
char* PropVal2,
char* PropName3,
char* PropVal3,
REF(IHXPluginSearchEnumerator*) pIEnumerator) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::GetPlugin
*
* Purpose:
* Allocates a plugin based on index. Supports aggregation
*
*/
STDTQT_METHOD(GetPlugin)(THIS_ ULONG32 ulIndex,
REF(IUnknown*) pIUnkResult,
IUnknown* pIUnkOuter ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::FindPluginUsingValues
*
* Purpose:
* Allocates a plugin based on criteria. Supports aggregation
*
*/
STDTQT_METHOD(FindPluginUsingValues)(THIS_ IHXValues*,
REF(IUnknown*) pIUnkResult,
IUnknown* pIUnkOuter ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::FindPluginUsingStrings
*
* Purpose:
* Allocates a plugin based on criteria. Supports aggregation
*
*/
STDTQT_METHOD(FindPluginUsingStrings)(THIS_ char* PropName1,
char* PropVal1,
char* PropName2,
char* PropVal2,
char* PropName3,
char* PropVal3,
REF(IUnknown*) pIUnkResult,
IUnknown* pIUnkOuter ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::UnloadPluginFromClassID
*
* Purpose:
* Finds a plugin from the classID and unloads it if it supports CanUnload2
* and returns TRUE in response to query
*/
STDTQT_METHOD( UnloadPluginFromClassID )( THIS_ REFGUID GUIDClassID ) PURE;
/************************************************************************
* Method:
* IHXPluginHandler3::UnloadPackageByName
*
* Purpose:
* finds a package from the name passed in and attempts to unload it.
*/
STDTQT_METHOD (UnloadPackageByName) (char const* pName) PURE;
};
// $EndPrivate.
// $Private:
/****************************************************************************
*
* Interface:
*
* IHXPluginDatabase
*
* Purpose:
*
* Extensions to the plugin handler for optimized searching
* on a single key
*
* IID_IHXPluginDatabase:
*
* {C2C65401-A478-11d4-9518-00902790299C}
*
*/
enum EPluginIndexType
{
kIndex_StringType,
kIndex_BufferType,
kIndex_GUIDType,
kIndex_MVStringType,
kIndex_NumTypes
};
DEFINE_GUID( IID_IHXPluginDatabase, 0xc2c65401, 0xa478, 0x11d4, 0x95, 0x18, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
#undef INTERFACE
#define INTERFACE IHXPluginDatabase
DECLARE_INTERFACE_(IHXPluginDatabase, IUnknown)
{
/************************************************************************
* Method:
* IHXPluginDatabase::AddPluginIndex
*
* Purpose:
* Create a new index in the plugin-handler
*
*/
STDTQT_METHOD( AddPluginIndex ) ( THIS_ const char* pKeyName, EPluginIndexType indexType, HXBOOL bScanExisting ) PURE;
/************************************************************************
* Method:
* IHXPluginDatabase::RemovePluginIndex
*
* Purpose:
* Remove an index from the plugin handler
*
*/
STDTQT_METHOD( RemovePluginIndex )( THIS_ const char* pKeyName ) PURE;
/************************************************************************
* Method:
* IHXPluginDatabase::FindPluginInfoViaIndex
*
* Purpose:
* Look up a plugin's info based on a single attribute. Use an index if
* possible, otherwise defer to a linear search
*
*/
STDTQT_METHOD( FindPluginInfoViaIndex )( THIS_ const char* pKeyName, const void* pValue, IHXValues** ppIInfo ) PURE;
/************************************************************************
* Method:
* IHXPluginDatabase::FindPluginSetViaIndex
*
* Purpose:
* // XXXND Should this take pValue? Should it just return a list from an index?
* Find a set of plugins matching a single attribute
*
*/
STDTQT_METHOD( FindPluginSetViaIndex )( THIS_ const char* pKeyName, const void* pValue, IHXPluginSearchEnumerator** ppIEnumerator ) PURE;
/************************************************************************
* Method:
* IHXPluginDatabase::FindPluginViaIndex
*
* Purpose:
* Create a plugin based on a simple attribute.
*
*/
STDTQT_METHOD( CreatePluginViaIndex )( THIS_ const char* pKeyName, const void* pValue, IUnknown** ppIUnkPlugin, IUnknown* pIUnkOuter ) PURE;
};
// $EndPrivate.
// $Private:
/****************************************************************************
*
* Interface:
*
* IHXProxiedPugin
*
* Purpose:
*
* Provides The IHXPlugin actually being used.
*
* IID_IHXProxiedPlugin:
*
* {00000C10-0901-11d1-8B06-00A024406D59}
*
*/
DEFINE_GUID(IID_IHXProxiedPlugin, 0x00000C0A, 0x901, 0x11d1, 0x8b, 0x6, 0x0,
0xa0, 0x24, 0x40, 0x6d, 0x59);
#undef INTERFACE
#define INTERFACE IHXProxiedPlugin
DECLARE_INTERFACE_(IHXProxiedPlugin, IUnknown)
{
/*
* IUnknown methods
*/
STDTQT_METHOD(QueryInterface) (THIS_
REFIID riid,
void** ppvObj) PURE;
STDMETHOD_(ULONG32,AddRef) (THIS) PURE;
STDMETHOD_(ULONG32,Release) (THIS) PURE;
/*
* IHXProxiedPlugin methods
*/
/************************************************************************
* Method:
* IHXProxiedPlugin::GetProxiedPlugin
* Purpose:
* Gets the Actual Plugin being used...
*/
STDTQT_METHOD(GetProxiedPlugin)(THIS_
REF(IHXPlugin*) /*OUT*/ pPlugin) PURE;
};
// $EndPrivate.
// $Private:
/****************************************************************************
*
* Component plugin property names
*
* These attribute names are standard.
*
* ComponentCLSID maps to an IHXBuffer value that contains the
* binary CLSID for the component
*
* ComponentName maps to a string value that contains the tag or
* actor name for the component
*
*/
#define PLUGIN_COMPONENT_CLSID "ComponentCLSID"
#define PLUGIN_COMPONENT_NAME "ComponentName"
/****************************************************************************
*
* Interface:
*
* IHXComponentPlugin
*
* Purpose:
*
* Allows the plugin handler to iterator over multiple plugins in a DLL
*
* {F8A31571-22AC-11d4-9503-00902790299C}
*
*/
DEFINE_GUID( IID_IHXComponentPlugin, 0xf8a31571, 0x22ac, 0x11d4, 0x95, 0x3, 0x0, 0x90, 0x27, 0x90, 0x29, 0x9c);
#undef INTERFACE
#define INTERFACE IHXComponentPlugin
DECLARE_INTERFACE_(IHXComponentPlugin, IUnknown)
{
/*
* IHXComponentPlugin methods
*/
/************************************************************************
* Method:
* IHXComponentPlugin::GetNumberComponents
* Purpose:
*/
STDMETHOD_(UINT32, GetNumComponents)(THIS) PURE;
/************************************************************************
* Method:
* IHXComponentPlugin::GetPackageName
* Purpose:
*/
STDMETHOD_(char const*, GetPackageName)(THIS) CONSTQT_METHOD PURE;
/************************************************************************
* Method:
* IHXComponentPlugin::GetComponentInfoAtIndex
* Purpose:
*/
STDTQT_METHOD(GetComponentInfoAtIndex) (THIS_
UINT32 /*IN*/ nIndex,
REF(IHXValues*) /*OUT*/ pInfo) PURE;
/************************************************************************
* Method:
* IHXComponentPlugin::CreateComponentInstance
* Purpose:
*/
STDTQT_METHOD(CreateComponentInstance)(THIS_
REFCLSID /*IN*/ rclsid,
REF(IUnknown*) /*OUT*/ ppUnknown,
IUnknown* /*IN*/ pUnkOuter) PURE;
};
/****************************************************************************
*
* Interface:
*
* IHXPluginNamespace
*
* Purpose:
*
* Allows the plugin handler to retrieve a plugin's namespace
*
* {F09E8891-8E2D-11d4-82DB-00D0B74C2D25}
*
*/
DEFINE_GUID(IID_IHXPluginNamespace, 0xf09e8891, 0x8e2d, 0x11d4, 0x82, 0xdb, 0x0, 0xd0, 0xb7, 0x4c, 0x2d, 0x25);
#undef INTERFACE
#define INTERFACE IHXPluginNamespace
DECLARE_INTERFACE_(IHXPluginNamespace, IUnknown)
{
/************************************************************************
* Method:
* IHXPluginNamespace::GetPluginNamespace
* Purpose:
*/
STDTQT_METHOD(GetPluginNamespace) (THIS_
REF(IHXBuffer*) /*OUT*/ pBuffer) PURE;
};
// $EndPrivate.
#endif /* _HXPLUGN_H_ */