BROWSEH.H (BROWSEH OLE Sample)

#ifdef WIN32

#ifdef UNICODE

#define FROM_OLE_STRING(str) str

#define TO_OLE_STRING(str) str

#else

#define FROM_OLE_STRING(str) ConvertToAnsi(str)

char FAR* ConvertToAnsi(OLECHAR FAR* szW);

#define TO_OLE_STRING(str) ConvertToUnicode(str)

OLECHAR FAR* ConvertToUnicode(char FAR* szA);

// Maximum length of string that can be converted between Ansi & Unicode

#define STRCONVERT_MAXLEN 300

#endif

#else // WIN16

#define TCHAR char

#define TEXT(sz) sz

#define FROM_OLE_STRING(str) str

#define TO_OLE_STRING(str) str

#define LPTSTR LPSTR

#endif

#include "mydisp.h"

#include "tlb.h"

// MAX len of string table entries

#define STR_LEN 200

// String table constants

#define IDS_SERVERNAME 1

// These exception strings IDs that is will used in EXCEPINFO.wCode

#define IDS_Unexpected 1001

#define IDS_OutOfMemory 1002

#define IDS_InvalidIndex 1003

#define IDS_CollectionFull 1004

#define IDS_CannotFindTypeLibrary 1005

#define IDS_TypeLibraryCreationFailed 1006

#define IDS_WrongType 1007

#define IDS_InvalidProgid 1008

#define IDS_CouldNotCreateObject 1009

#define IDS_ObjectDoesNotSupportAutomation 1010

#define IDS_ObjectDoesNotProvideTypeInfo 1011

// Function prototypes

BOOL InitDLL (HINSTANCE hInstance);

extern "C" STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID FAR *ppv);

extern "C" STDAPI DllCanUnloadNow(void);

//Forward declarations.

class CArrayBound;

class FAR CBrowseHelperCF : public IClassFactory

{

public:

// IUnknown methods

STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj);

STDMETHOD_(ULONG, AddRef)(void);

STDMETHOD_(ULONG, Release)(void);

// IClassFactory methods

STDMETHOD(CreateInstance)(IUnknown FAR* punkOuter, REFIID riid, void FAR* FAR* ppv);

STDMETHOD(LockServer)(BOOL fLock);

CBrowseHelperCF();

private:

ULONG m_cRef; // Reference count

};

class FAR CBrowseHelper : public IBrowseHelper

{

public:

// IBrowseHelper automation exposed methods

STDMETHOD_(ITypeLibrary FAR*, BrowseTypeLibrary)(BSTR bstrPath);

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(CBrowseHelper FAR* FAR* ppBrowseHelper); // Creates and intializes Applicaton object

CBrowseHelper();

~CBrowseHelper();

};

class FAR CTypeLibrary : public ITypeLibrary

{

public:

// ITypeLibrary automation exposed properties & methods

STDMETHOD_(BSTR, get_Name)();

STDMETHOD_(BSTR, get_Documentation)();

STDMETHOD_(long, get_HelpContext)();

STDMETHOD_(BSTR, get_HelpFile)();

STDMETHOD_(long, get_LocaleID)();

STDMETHOD_(int, get_MajorVersion)();

STDMETHOD_(int, get_MinorVersion)();

STDMETHOD_(ICollection FAR*, get_TypeInfos)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPELIB ptlib, CTypeLibrary FAR* FAR* ppTypeLibrary); // Creates and intializes TypeLibrary object

CTypeLibrary();

~CTypeLibrary();

private:

BSTR m_bstrName; // Type Library name

BSTR m_bstrDocumentation; // Documentation

unsigned long m_ulHelpContext; // HelpContext

BSTR m_bstrHelpFile; // HelpFile

GUID m_guid; // GUID

LCID m_lcid; // Locale ID

unsigned short m_wMajorVer; // Major version

unsigned short m_wMinorVer; // Minor version

LPTYPELIB m_ptlib; // ITypeLib* of type library.

LPDISPATCH m_pdispTypeInfos; // Collection of typeinfos contained by this typelib

};

// CTypeInfo is the base class for all the TypeInfos (CInterface, CDispinterface,

// CModule, CCoClass, CEnum, CStruct, CUnion, CAlias)

class FAR CTypeInfo : public ITypeInformation

{

public:

// ITypeInfo automation exposed properties & methods

STDMETHOD_(BSTR, get_Name)();

STDMETHOD_(BSTR, get_Documentation)();

STDMETHOD_(long, get_HelpContext)();

STDMETHOD_(BSTR, get_HelpFile)();

STDMETHOD_(TYPEKIND, get_TypeInfoKind)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

STDMETHOD(_InitTypeInfo)(LPTYPEINFO ptinfo); // Called by derived class to intialize this base class

static HRESULT Create(LPTYPEINFO ptinfo, CTypeInfo FAR* FAR* ppTypeInfo); // Creates and intializes TypeInfo object

CTypeInfo();

~CTypeInfo();

private:

BSTR m_bstrName; // TypeInfo name

BSTR m_bstrDocumentation; // Documentation

unsigned long m_ulHelpContext; // Help context

BSTR m_bstrHelpFile; // Help file

TYPEKIND m_typekind; // Type of TypeInfo. See TYPEKIND enumeration.

GUID m_guid; // GUID

};

class FAR CInterface : public CTypeInfo

{

public:

// IInterface automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Functions)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CInterface FAR* FAR* ppInterface); // Creates and intializes Interface object

CInterface();

~CInterface();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of interface typeinfo.

LPDISPATCH m_pdispFunctions; // Collection of functions in interface.

};

class FAR CDispinterface : public CTypeInfo

{

public:

// IDispinterface automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Properties)();

STDMETHOD_(ICollection FAR*, get_Methods)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CDispinterface FAR* FAR* ppDispinterface); // Creates and intializes Dispinterface object

CDispinterface();

~CDispinterface();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of dispinterface typeinfo.

LPDISPATCH m_pdispProperties; // Collection of properties in dispinterface

LPDISPATCH m_pdispMethods; // Collection of methods in dispinterface

};

class FAR CModule : public CTypeInfo

{

public:

// IModule automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Functions)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CModule FAR* FAR* ppInterface); // Creates and intializes Module object

CModule();

~CModule();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of module typeinfo.

LPDISPATCH m_pdispFunctions; // Collection of functions in module

};

class FAR CCoClass : public CTypeInfo

{

public:

// ICoClass automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Interfaces)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CCoClass FAR* FAR* ppCoClass); // Creates and intializes CoClass object

CCoClass();

~CCoClass();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of coclass typeinfo.

LPDISPATCH m_pdispInterfaces; // Collection of interfaces/dispinterfaces in coclass

};

class FAR CEnum : public CTypeInfo

{

public:

// IEnum automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Elements)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CEnum FAR* FAR* ppEnum); // Creates and intializes Enum object

CEnum();

~CEnum();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of enum typeinfo.

LPDISPATCH m_pdispElements; // Collection of elements in enum.

};

class FAR CStruct : public CTypeInfo

{

public:

// IStruct automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Members)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CStruct FAR* FAR* ppStruct); // Creates and intializes Struct object

CStruct();

~CStruct();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of struct typeinfo.

LPDISPATCH m_pdispMembers; // Collection of members in struct.

};

class FAR CUnion : public CTypeInfo

{

public:

// IUnion automation exposed properties & methods

STDMETHOD_(ICollection FAR*, get_Members)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CUnion FAR* FAR* ppUnion); // Creates and intializes Struct object

CUnion();

~CUnion();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of union typeinfo.

LPDISPATCH m_pdispMembers; // Collection of members in union.

};

class FAR CAlias : public CTypeInfo

{

public:

// IAlias automation exposed properties & methods

STDMETHOD_(ITypeDesc FAR*, get_BaseType)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, CAlias FAR* FAR* ppAlias); // Creates and intializes Alias object

CAlias();

~CAlias();

private:

LPTYPEINFO m_ptinfo; // ITypeInfo* of alias typeinfo.

LPDISPATCH m_pdispTypeDescBase; // IDispatch of ITypeDesc which describes the base type of this alias.

};

// CFunction represents all functions (including methods).

class FAR CFunction : public IFunction

{

public:

// IFunction automation exposed properties & methods

STDMETHOD_(BSTR, get_Name)();

STDMETHOD_(BSTR, get_Documentation)();

STDMETHOD_(long, get_HelpContext)();

STDMETHOD_(BSTR, get_HelpFile)();

STDMETHOD_(ITypeDesc FAR*, get_ReturnType)();

STDMETHOD_(ICollection FAR*, get_Parameters)();

STDMETHOD_(MEMBERID, get_Memberid)();

STDMETHOD_(CALLCONV, get_CallConvention)();

STDMETHOD_(FUNCKIND, get_FuncKind)();

STDMETHOD_(INVOKEKIND, get_InvocationKind)();

STDMETHOD_(OBJTYPE, get_Kind)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, unsigned short nIndex, CFunction FAR* FAR* ppFunction); // Creates and intializes Function object

CFunction();

~CFunction();

private:

BSTR m_bstrName; // Function name.

BSTR m_bstrDocumentation; // Documentation.

unsigned long m_ulHelpContext; // Help context.

BSTR m_bstrHelpFile; // Help file.

LPDISPATCH m_pdispTypeDesc; // IDispatch of ITypeDesc that described return type.

LPDISPATCH m_pdispParameters; // Collection of parameters function.

LPFUNCDESC m_pfuncdesc; // FUNCDESC of function.

LPTYPEINFO m_ptinfoFunction; // TypeInfo of which this function is an element.

};

// CProperty represents dispinterface properties and structure & union members.

class FAR CProperty : public IProperty

{

public:

// IProperty automation exposed properties & methods

STDMETHOD_(BSTR, get_Name)();

STDMETHOD_(BSTR, get_Documentation)();

STDMETHOD_(long, get_HelpContext)();

STDMETHOD_(BSTR, get_HelpFile)();

STDMETHOD_(ITypeDesc FAR*, get_Type)();

STDMETHOD_(MEMBERID, get_Memberid)();

STDMETHOD_(OBJTYPE, get_Kind)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, LPVARDESC pvardesc, CProperty FAR* FAR* ppProperty); // Creates and intializes Property object

CProperty();

~CProperty();

private:

BSTR m_bstrName; // Property name.

BSTR m_bstrDocumentation; // Documentation.

unsigned long m_ulHelpContext; // Help Context.

BSTR m_bstrHelpFile; // Helpfile.

MEMBERID m_memid; // MEMBERID of property.

LPDISPATCH m_pdispTypeDesc; // ITypeDesc that describes type of property.

};

class FAR CConstant : public IConstant

{

public:

// IConstant automation exposed properties & methods

STDMETHOD_(BSTR, get_Name)();

STDMETHOD_(BSTR, get_Documentation)();

STDMETHOD_(long, get_HelpContext)();

STDMETHOD_(BSTR, get_HelpFile)();

STDMETHOD_(ITypeDesc FAR*, get_Type)();

STDMETHOD_(VARIANT, get_Value)();

STDMETHOD_(MEMBERID, get_Memberid)();

STDMETHOD_(OBJTYPE, get_Kind)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, LPVARDESC pvardesc, CConstant FAR* FAR* ppConstant); // Creates and intializes Constant object

CConstant();

~CConstant();

private:

BSTR m_bstrName; // Constant name

BSTR m_bstrDocumentation; // Documentation

unsigned long m_ulHelpContext; // Help context

BSTR m_bstrHelpFile; // Helpfile

LPDISPATCH m_pdispTypeDesc; // ITypeDesc that describes type of constant.

MEMBERID m_memid; // MEMBERID.

VARIANT m_vValue; // Constant value.

};

class FAR CParameter : public IParameter

{

public:

// IParameter automation exposed properties & methods

STDMETHOD_(BSTR, get_Name)();

STDMETHOD_(ITypeDesc FAR*, get_Type)();

STDMETHOD_(int, get_IDLFlags)();

STDMETHOD_(OBJTYPE, get_Kind)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, BSTR bstrName, TYPEDESC FAR* ptypedesc,

IDLDESC FAR* pidldesc, CParameter FAR* FAR* ppParameter); // Creates and intializes Parameter object

CParameter();

~CParameter();

private:

BSTR m_bstrName; // Parameter name.

unsigned short m_wIDLFlags; // specifies in/out/in-out/none

LPDISPATCH m_pdispTypeDesc; // ITypeDesc* that describes type of parameter.

};

// Describes a type

class FAR CTypeDesc : public ITypeDesc

{

public:

// ITypeDesc automation exposed properties & methods

STDMETHOD_(short, get_Type)();

STDMETHOD_(ITypeInformation FAR*, get_UserDefinedDesc)();

STDMETHOD_(IArrayDesc FAR*, get_ArrayDesc)();

STDMETHOD_(ITypeDesc FAR*, get_PointerDesc)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, TYPEDESC FAR* ptypedesc, CTypeDesc FAR* FAR* ppTypeDesc); // Creates and intializes TypeDesc object

CTypeDesc();

~CTypeDesc();

private:

VARTYPE m_vartype; // Type

LPDISPATCH m_pdispUserDefinedDesc; // If m_vartype==VT_USERDEFINED, contains ITypeInformation* of user-defined type.,

LPDISPATCH m_pdispArrayDesc; // if m_vartype==VT_CARRAY, contains IArrayDesc*

LPDISPATCH m_pdispPointerDesc; // if m_vartype==VT_PTR contains ITypeDesc* of type pointed to.

};

// Describes C-Style array

class FAR CArrayDesc : public IArrayDesc

{

public:

// IArrayDesc automation exposed properties & methods

STDMETHOD_(ITypeDesc FAR*, get_ElementType)();

STDMETHOD_(ICollection FAR*, get_ArrayBounds)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(LPTYPEINFO ptinfo, ARRAYDESC FAR* parraydesc, CArrayDesc FAR* FAR* ppArrayDesc); // Creates and intializes ArrayDesc object

CArrayDesc();

~CArrayDesc();

private:

LPDISPATCH m_pdispTypeDescElement; // ITypeDesc that descibed type of array element.

LPDISPATCH m_pdispArrayBounds; // IArrayBound that describes array bounds.

};

class FAR CArrayBound : public IArrayBound

{

public:

// IArrayBound automation exposed properties & methods

STDMETHOD_(long, get_ElementsCount)();

STDMETHOD_(long, get_LowerBound)();

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(unsigned long cElements, long lLBound, CArrayBound FAR* FAR* ppArrayBound); // Creates and intializes ArrayBound object

private:

unsigned long m_cElements; // Count of elements in array.

long m_lLBound; // Lower bound of array.

};

// Generic collection class that holds all collections.

class FAR CCollection : public ICollection

{

public:

// ICollection automation exposed properties & methods

STDMETHOD_(long, get_Count)();

STDMETHOD_(LPDISPATCH, get_Item)(long lIndex);

STDMETHOD_(LPUNKNOWN, get__NewEnum)();

// CCollection methods

STDMETHOD_(void, Add)(LPDISPATCH pdispItem);

STDMETHOD_(REFCLSID, GetInterfaceID)();

static HRESULT Create(ULONG lMaxSize, long lLBound, CCollection FAR* FAR* ppCollection); // Creates and intializes Collection object

CCollection();

~CCollection();

private:

SAFEARRAY FAR *m_psa; // Safe array that holds Collection collection items.

ULONG m_cElements; // Number of items in Collection collection.

ULONG m_cMax; // Maximum number of items Collection collection can hold.

long m_lLBound; // Lower bound of index of Collection collection.

};

class FAR CEnumVariant : public IEnumVARIANT

{

public:

// IUnknown methods

STDMETHOD(QueryInterface)(REFIID riid, LPVOID FAR* ppvObj);

STDMETHOD_(ULONG, AddRef)();

STDMETHOD_(ULONG, Release)();

// IEnumVARIANT methods

STDMETHOD(Next)(ULONG cElements, VARIANT FAR* pvar, ULONG FAR* pcElementFetched);

STDMETHOD(Skip)(ULONG cElements);

STDMETHOD(Reset)();

STDMETHOD(Clone)(IEnumVARIANT FAR* FAR* ppenum);

static HRESULT Create(SAFEARRAY FAR*, ULONG, CEnumVariant FAR* FAR*); // Creates and intializes Enumerator

CEnumVariant();

~CEnumVariant();

private:

ULONG m_cRef; // Reference count

ULONG m_cElements; // Number of elements in enumerator.

long m_lLBound; // Lower bound of index.

long m_lCurrent; // Current index.

SAFEARRAY FAR* m_psa; // Safe array that holds elements.

};

Software for developers
Delphi Components
.Net Components
Software for Android Developers
More information resources
MegaDetailed.Net
Unix Manual Pages
Delphi Examples
Databases for Amazon shops developers
Amazon Categories Database
Browse Nodes Database