|
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.
};
| Last news from Greatis Software |
 |
|
Nostalgia .Net |
|
.Net is powerful, but not all-powerful, so sometimes we need to use Win32 API for our .Net applications. It's simple enough with Platform Invoke if you have Win32 skill, but we do not always have time to dig the ancient documentation, declare the special types that are compatible with Win32, find the values of the Win32's constants and so on. Nostalgia .Net offers several simple-to-use classes, and components that will allow you to forget about the headache of Win32 and just use the power of Win32 in your application the same way as you use the native. Net classes. More » |
| Recommended software for developers |
 |
|
Ultimate Pack |
|
Component pack for Delphi and C++ Builder that contains runtime form designer, runtime object inspector, print suite and much more for the very special price. More » |
 |
|
Form Designer .Net |
|
Unique runtime form design solution that allows to edit any form in .Net WinForms application at runtime with full source codes for only 300 euro! More » |
 |
|
Print Suite .Net |
|
Print Suite .Net is a set of components for easy printing texts, images and grids from your WinForms applications. Full C# source codes are available More » |
 |
|
Gradient Controls .Net |
|
Gradient Controls .Net offers controls with gradient background feature. Labels, panels and so on... Full C# source codes are available More » |
 |
|
Greatis iGrid |
|
iGrid plots drawing grid right over your desktop, so you can use it everywhere, with any drawing application without any special plugins for different graphic editors. More » |
All the contacts and projectsDmitry Vasiliev (just.dmitry)
Related LinksSoftware for Visual Studio .NET developers Software for Delphi and C++ Builder developers Software for Visual Basic 6 developers Delphi Tips&Tricks MegaDetailed.NET More Online Helps Win32 Programmer's Reference Win32 Multimedia Programmer's Reference OLE Programmer's Reference Microsoft Windows Pen API Programmer's Reference Microsoft Windows Sockets 2 Reference Microsoft Windows Telephony API (TAPI) Programmer's Reference Unix Manual Pages
|