///////////////////////////////////////////////////////////////////////////////
// hashstring.idl
//
// ABSTRACT:
// Contains interface definition for IStringTable.  This implementer maintains a 
// key/value pair of BSTR string values for lookup by any caller.
//
// HISTORY:
// 05/12/00 - created (cfeller)
///////////////////////////////////////////////////////////////////////////////

import "oaidl.idl";
import "ocidl.idl";
	[
		object,
		uuid(20FDEBA0-E15A-42DA-9E3F-B5A5619E5229),
		helpstring("IStringTable Interface"),
		pointer_default(unique)
	]
	interface IStringTable : IUnknown
	{
		// Load strings from the given ini file section.  Ini file must be in the form of:
		//
		// [THE_SECTION_NAME]
		// Name1=Value1
		// Name2=Value2		
		// 
		// NOTE: The total number characters in the entire section must not exceed 8192.
		HRESULT LoadStringsFromFile([in] BSTR szConfigurationFilePath, [in] BSTR szIniSection);
	    
		// Store a new string value in the component.  
		HRESULT AddString([in] BSTR szKey, [in] BSTR szValue);

        // Store a new numeric value in the component.
        HRESULT AddNumber([in] BSTR szKey, [in] long lValue);

		// Retrieve the stored value identified by the given key.  
		//
		// NOTE: Returns a copy of the data...NOT the original.  Caller is responsible for 
		//       freeing the allocated copy.
		HRESULT LookupString([in] BSTR szKey, [out,retval] BSTR* pbstrValue);

        // Retrieve the stored value identified by the given key.
        //
        HRESULT LookupNumber([in] BSTR szKey, [out,retval] long* plValue);

		// Remove all strings stored by the component
		HRESULT ClearStrings();
	};

[
	uuid(D16D0A7E-DB9A-4080-8CB6-D5FD6AE17269),
	version(1.0),
	helpstring("HashString 1.0 Type Library")
]
library HASHSTRINGLib
{
	importlib("stdole32.tlb");
	importlib("stdole2.tlb");
	import "passportservice.idl";

	[
		uuid(5769ACF1-99C7-45BE-BC9B-A54A6648FD05),
		helpstring("StringTable Class")
	]
	coclass StringTable
	{
		[default] interface IStringTable;
		interface IPassportService;
	};
};


////////////
// EOF
////////////