#ifndef _UNKNWN_H
#define _UNKNWN_H
#include "wtypes.h"

#define E_NOINTERFACE ((HRESULT)0x80004002L)
#define E_POINTER ((HRESULT)0x80004003L)
#define E_FAIL ((HRESULT)0x80004005L)
#define E_INVALIDARG ((HRESULT)0x80070057L)

#ifndef __IUnknown_INTERFACE_DEFINED__
#define __IUnknown_INTERFACE_DEFINED__
#define INTERFACE IUnknown
DECLARE_INTERFACE(IUnknown)
{
	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
	STDMETHOD_(ULONG,Release)(THIS) PURE;
};
#undef INTERFACE
typedef IUnknown *LPUNKNOWN;
EXTERN_C const IID IID_IUnknown;
#endif

#ifndef __IClassFactory_INTERFACE_DEFINED__
#define __IClassFactory_INTERFACE_DEFINED__
#define INTERFACE IClassFactory
DECLARE_INTERFACE_(IClassFactory,IUnknown)
{
	STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
	STDMETHOD_(ULONG,AddRef)(THIS) PURE;
	STDMETHOD_(ULONG,Release)(THIS) PURE;
	STDMETHOD(CreateInstance)(THIS_ LPUNKNOWN,REFIID,PVOID*) PURE;
	STDMETHOD(LockServer)(THIS_ BOOL_) PURE;
};
#undef INTERFACE
typedef IClassFactory *LPCLASSFACTORY;
#endif

typedef void* LPTYPEINFO;

#define INTERFACE IDispatch
DECLARE_INTERFACE_(IDispatch,IUnknown)
{
        STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
        STDMETHOD_(ULONG,AddRef)(THIS) PURE;
        STDMETHOD_(ULONG,Release)(THIS) PURE;
        STDMETHOD(GetTypeInfoCount)(THIS_ UINT*) PURE;
        STDMETHOD(GetTypeInfo)(THIS_ UINT,LCID,LPTYPEINFO*) PURE;
        STDMETHOD(GetIDsOfNames)(THIS_ REFIID,LPOLESTR*,UINT,LCID,DISPID*) PURE;
        STDMETHOD(Invoke)(THIS_ DISPID,REFIID,LCID,WORD,void*,void*,void*,UINT*) PURE;
};
#undef INTERFACE
typedef IDispatch *LPDISPATCH;

#define INTERFACE IErrorInfo
DECLARE_INTERFACE_(IErrorInfo, IUnknown)
{
        STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE;
        STDMETHOD_(ULONG,AddRef)(THIS) PURE;
        STDMETHOD_(ULONG,Release)(THIS) PURE;
        STDMETHOD(GetGUID)(THIS_ GUID*) PURE;
        STDMETHOD(GetSource)(THIS_ BSTR*) PURE;
        STDMETHOD(GetDescription)(THIS_ BSTR*) PURE;
        STDMETHOD(GetHelpFile)(THIS_ BSTR*) PURE;
        STDMETHOD(GetHelpContext)(THIS_ DWORD*) PURE;
};
#undef INTERFACE
typedef IErrorInfo *LPERRORINFO;
EXTERN_C const IID IID_IErrorInfo;
#endif