📄 oaidl.idl
字号:
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright 1992 - 1998 Microsoft Corporation.
//
// File: oaidl.idl
//
//----------------------------------------------------------------------------
cpp_quote("//+-------------------------------------------------------------------------")
cpp_quote("//")
cpp_quote("// Microsoft Windows")
cpp_quote("// Copyright 1992 - 1998 Microsoft Corporation.")
cpp_quote("//")
cpp_quote("//--------------------------------------------------------------------------")
cpp_quote("#if ( _MSC_VER >= 800 )")
cpp_quote("#pragma warning(disable:4201) /* Nameless struct/union */")
cpp_quote("#endif")
#ifndef DO_NO_IMPORTS
import "objidl.idl";
#endif
interface ICreateTypeInfo;
interface ICreateTypeInfo2;
interface ICreateTypeLib;
interface ICreateTypeLib2;
interface IDispatch;
interface IEnumVARIANT;
interface ITypeComp;
interface ITypeInfo;
interface ITypeInfo2;
interface ITypeLib;
interface ITypeLib2;
interface ITypeChangeEvents;
interface IErrorInfo;
interface ICreateErrorInfo;
interface ISupportErrorInfo;
interface ITypeFactory;
interface ITypeMarshal;
interface IRecordInfo;
[
version(1.0), pointer_default(unique)
]
interface IOleAutomationTypes
{
typedef CY CURRENCY;
// #########################################################################
// SAFEARRAY
// #########################################################################
typedef struct tagSAFEARRAYBOUND {
ULONG cElements;
LONG lLbound;
} SAFEARRAYBOUND, * LPSAFEARRAYBOUND;
cpp_quote("/* the following is what MIDL knows how to remote */")
// Forward references.
typedef [unique] struct _wireVARIANT * wireVARIANT;
typedef [unique] struct _wireBRECORD * wireBRECORD;
typedef struct _wireSAFEARR_BSTR {
ULONG Size;
[size_is(Size), ref] wireBSTR * aBstr;
} SAFEARR_BSTR;
typedef struct _wireSAFEARR_UNKNOWN {
ULONG Size;
[size_is(Size), ref] IUnknown ** apUnknown;
} SAFEARR_UNKNOWN;
typedef struct _wireSAFEARR_DISPATCH {
ULONG Size;
[size_is(Size), ref] IDispatch ** apDispatch;
} SAFEARR_DISPATCH;
typedef struct _wireSAFEARR_VARIANT {
ULONG Size;
[size_is(Size), ref] wireVARIANT * aVariant;
} SAFEARR_VARIANT;
typedef struct _wireSAFEARR_BRECORD {
ULONG Size;
[size_is(Size), ref] wireBRECORD * aRecord;
} SAFEARR_BRECORD;
typedef struct _wireSAFEARR_HAVEIID {
ULONG Size;
[size_is(Size), ref] IUnknown ** apUnknown;
IID iid;
} SAFEARR_HAVEIID;
typedef [v1_enum] enum tagSF_TYPE {
SF_ERROR = VT_ERROR,
SF_I1 = VT_I1,
SF_I2 = VT_I2,
SF_I4 = VT_I4,
SF_I8 = VT_I8,
SF_BSTR = VT_BSTR,
SF_UNKNOWN = VT_UNKNOWN,
SF_DISPATCH = VT_DISPATCH,
SF_VARIANT = VT_VARIANT,
SF_RECORD = VT_RECORD,
SF_HAVEIID = VT_UNKNOWN|VT_RESERVED,
} SF_TYPE;
typedef union _wireSAFEARRAY_UNION switch(ULONG sfType) u {
case SF_BSTR: SAFEARR_BSTR BstrStr;
case SF_UNKNOWN: SAFEARR_UNKNOWN UnknownStr;
case SF_DISPATCH: SAFEARR_DISPATCH DispatchStr;
case SF_VARIANT: SAFEARR_VARIANT VariantStr;
case SF_RECORD: SAFEARR_BRECORD RecordStr;
case SF_HAVEIID: SAFEARR_HAVEIID HaveIidStr;
case SF_I1: BYTE_SIZEDARR ByteStr;
case SF_I2: WORD_SIZEDARR WordStr;
case SF_I4: DWORD_SIZEDARR LongStr;
case SF_I8: HYPER_SIZEDARR HyperStr;
} SAFEARRAYUNION;
typedef [unique] struct _wireSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
SAFEARRAYUNION uArrayStructs;
[size_is(cDims)] SAFEARRAYBOUND rgsabound[];
} * wireSAFEARRAY;
typedef [unique] wireSAFEARRAY * wirePSAFEARRAY;
typedef struct tagSAFEARRAY {
USHORT cDims;
USHORT fFeatures;
ULONG cbElements;
ULONG cLocks;
PVOID pvData;
SAFEARRAYBOUND rgsabound[];
} SAFEARRAY;
typedef [wire_marshal(wirePSAFEARRAY)] SAFEARRAY * LPSAFEARRAY;
const USHORT FADF_AUTO = 0x0001; /* array is allocated on the stack */
const USHORT FADF_STATIC = 0x0002; /* array is staticly allocated */
const USHORT FADF_EMBEDDED = 0x0004; /* array is embedded in a structure */
const USHORT FADF_FIXEDSIZE = 0x0010; /* may not be resized or reallocated */
const USHORT FADF_RECORD = 0x0020; /* an array of records */
const USHORT FADF_HAVEIID = 0x0040; /* with FADF_DISPATCH, FADF_UNKNOWN */
/* array has an IID for interfaces */
const USHORT FADF_HAVEVARTYPE= 0x0080; /* array has a VT type */
const USHORT FADF_BSTR = 0x0100; /* an array of BSTRs */
const USHORT FADF_UNKNOWN = 0x0200; /* an array of IUnknown* */
const USHORT FADF_DISPATCH = 0x0400; /* an array of IDispatch* */
const USHORT FADF_VARIANT = 0x0800; /* an array of VARIANTs */
const USHORT FADF_RESERVED = 0xF008; /* reserved bits */
// #########################################################################
// VARIANT
// #########################################################################
cpp_quote("/* VARIANT STRUCTURE")
cpp_quote(" *")
cpp_quote(" * VARTYPE vt;")
cpp_quote(" * WORD wReserved1;")
cpp_quote(" * WORD wReserved2;")
cpp_quote(" * WORD wReserved3;")
cpp_quote(" * union {")
cpp_quote(" * LONG VT_I4")
cpp_quote(" * BYTE VT_UI1")
cpp_quote(" * SHORT VT_I2")
cpp_quote(" * FLOAT VT_R4")
cpp_quote(" * DOUBLE VT_R8")
cpp_quote(" * VARIANT_BOOL VT_BOOL")
cpp_quote(" * SCODE VT_ERROR")
cpp_quote(" * CY VT_CY")
cpp_quote(" * DATE VT_DATE")
cpp_quote(" * BSTR VT_BSTR")
cpp_quote(" * IUnknown * VT_UNKNOWN")
cpp_quote(" * IDispatch * VT_DISPATCH")
cpp_quote(" * SAFEARRAY * VT_ARRAY")
cpp_quote(" * BYTE * VT_BYREF|VT_UI1")
cpp_quote(" * SHORT * VT_BYREF|VT_I2")
cpp_quote(" * LONG * VT_BYREF|VT_I4")
cpp_quote(" * FLOAT * VT_BYREF|VT_R4")
cpp_quote(" * DOUBLE * VT_BYREF|VT_R8")
cpp_quote(" * VARIANT_BOOL * VT_BYREF|VT_BOOL")
cpp_quote(" * SCODE * VT_BYREF|VT_ERROR")
cpp_quote(" * CY * VT_BYREF|VT_CY")
cpp_quote(" * DATE * VT_BYREF|VT_DATE")
cpp_quote(" * BSTR * VT_BYREF|VT_BSTR")
cpp_quote(" * IUnknown ** VT_BYREF|VT_UNKNOWN")
cpp_quote(" * IDispatch ** VT_BYREF|VT_DISPATCH")
cpp_quote(" * SAFEARRAY ** VT_BYREF|VT_ARRAY")
cpp_quote(" * VARIANT * VT_BYREF|VT_VARIANT")
cpp_quote(" * PVOID VT_BYREF (Generic ByRef)")
cpp_quote(" * CHAR VT_I1")
cpp_quote(" * USHORT VT_UI2")
cpp_quote(" * ULONG VT_UI4")
cpp_quote(" * INT VT_INT")
cpp_quote(" * UINT VT_UINT")
cpp_quote(" * DECIMAL * VT_BYREF|VT_DECIMAL")
cpp_quote(" * CHAR * VT_BYREF|VT_I1")
cpp_quote(" * USHORT * VT_BYREF|VT_UI2")
cpp_quote(" * ULONG * VT_BYREF|VT_UI4")
cpp_quote(" * INT * VT_BYREF|VT_INT")
cpp_quote(" * UINT * VT_BYREF|VT_UINT")
cpp_quote(" * }")
cpp_quote(" */")
cpp_quote("#if (__STDC__ && !defined(_FORCENAMELESSUNION)) || defined(NONAMELESSUNION)")
cpp_quote("#define __VARIANT_NAME_1 n1")
cpp_quote("#define __VARIANT_NAME_2 n2")
cpp_quote("#define __VARIANT_NAME_3 n3")
cpp_quote("#define __VARIANT_NAME_4 brecVal")
cpp_quote("#else")
cpp_quote("#define __tagVARIANT")
cpp_quote("#define __VARIANT_NAME_1")
cpp_quote("#define __VARIANT_NAME_2")
cpp_quote("#define __VARIANT_NAME_3")
cpp_quote("#define __tagBRECORD")
cpp_quote("#define __VARIANT_NAME_4")
cpp_quote("#endif")
typedef [wire_marshal(wireVARIANT)] struct tagVARIANT VARIANT;
struct tagVARIANT {
union {
struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union {
LONG lVal; /* VT_I4 */
BYTE bVal; /* VT_UI1 */
SHORT iVal; /* VT_I2 */
FLOAT fltVal; /* VT_R4 */
DOUBLE dblVal; /* VT_R8 */
VARIANT_BOOL boolVal; /* VT_BOOL */
_VARIANT_BOOL bool; /* (obsolete) */
SCODE scode; /* VT_ERROR */
CY cyVal; /* VT_CY */
DATE date; /* VT_DATE */
BSTR bstrVal; /* VT_BSTR */
IUnknown * punkVal; /* VT_UNKNOWN */
IDispatch * pdispVal; /* VT_DISPATCH */
SAFEARRAY * parray; /* VT_ARRAY */
BYTE * pbVal; /* VT_BYREF|VT_UI1 */
SHORT * piVal; /* VT_BYREF|VT_I2 */
LONG * plVal; /* VT_BYREF|VT_I4 */
FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
_VARIANT_BOOL *pbool; /* (obsolete) */
SCODE * pscode; /* VT_BYREF|VT_ERROR */
CY * pcyVal; /* VT_BYREF|VT_CY */
DATE * pdate; /* VT_BYREF|VT_DATE */
BSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */
IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */
SAFEARRAY ** pparray; /* VT_BYREF|VT_ARRAY */
VARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */
PVOID byref; /* Generic ByRef */
CHAR cVal; /* VT_I1 */
USHORT uiVal; /* VT_UI2 */
ULONG ulVal; /* VT_UI4 */
INT intVal; /* VT_INT */
UINT uintVal; /* VT_UINT */
DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */
CHAR * pcVal; /* VT_BYREF|VT_I1 */
USHORT * puiVal; /* VT_BYREF|VT_UI2 */
ULONG * pulVal; /* VT_BYREF|VT_UI4 */
INT * pintVal; /* VT_BYREF|VT_INT */
UINT * puintVal; /* VT_BYREF|VT_UINT */
struct __tagBRECORD {
PVOID pvRecord;
IRecordInfo * pRecInfo;
} __VARIANT_NAME_4; /* VT_RECORD */
} __VARIANT_NAME_3;
} __VARIANT_NAME_2;
DECIMAL decVal;
} __VARIANT_NAME_1;
};
typedef VARIANT * LPVARIANT;
typedef VARIANT VARIANTARG;
typedef VARIANT * LPVARIANTARG;
cpp_quote("/* the following is what MIDL knows how to remote */")
struct _wireBRECORD {
ULONG fFlags;
ULONG clSize;
IRecordInfo * pRecInfo;
[size_is(clSize)] byte * pRecord;
};
struct _wireVARIANT {
DWORD clSize; /* wire buffer length in units of hyper (int64) */
DWORD rpcReserved; /* for future use */
USHORT vt;
USHORT wReserved1;
USHORT wReserved2;
USHORT wReserved3;
[switch_type(ULONG), switch_is(vt)] union {
[case(VT_I4)] LONG lVal; /* VT_I4 */
[case(VT_UI1)] BYTE bVal; /* VT_UI1 */
[case(VT_I2)] SHORT iVal; /* VT_I2 */
[case(VT_R4)] FLOAT fltVal; /* VT_R4 */
[case(VT_R8)] DOUBLE dblVal; /* VT_R8 */
[case(VT_BOOL)] VARIANT_BOOL boolVal; /* VT_BOOL */
[case(VT_ERROR)] SCODE scode; /* VT_ERROR */
[case(VT_CY)] CY cyVal; /* VT_CY */
[case(VT_DATE)] DATE date; /* VT_DATE */
[case(VT_BSTR)] wireBSTR bstrVal; /* VT_BSTR */
[case(VT_UNKNOWN)] IUnknown * punkVal; /* VT_UNKNOWN */
[case(VT_DISPATCH)] IDispatch * pdispVal; /* VT_DISPATCH */
[case(VT_ARRAY)] wireSAFEARRAY parray; /* VT_ARRAY */
[case(VT_RECORD, VT_RECORD|VT_BYREF)]
wireBRECORD brecVal; /* VT_RECORD */
[case(VT_UI1|VT_BYREF)]
BYTE * pbVal; /* VT_BYREF|VT_UI1 */
[case(VT_I2|VT_BYREF)]
SHORT * piVal; /* VT_BYREF|VT_I2 */
[case(VT_I4|VT_BYREF)]
LONG * plVal; /* VT_BYREF|VT_I4 */
[case(VT_R4|VT_BYREF)]
FLOAT * pfltVal; /* VT_BYREF|VT_R4 */
[case(VT_R8|VT_BYREF)]
DOUBLE * pdblVal; /* VT_BYREF|VT_R8 */
[case(VT_BOOL|VT_BYREF)]
VARIANT_BOOL *pboolVal; /* VT_BYREF|VT_BOOL */
[case(VT_ERROR|VT_BYREF)]
SCODE * pscode; /* VT_BYREF|VT_ERROR */
[case(VT_CY|VT_BYREF)]
CY * pcyVal; /* VT_BYREF|VT_CY */
[case(VT_DATE|VT_BYREF)]
DATE * pdate; /* VT_BYREF|VT_DATE */
[case(VT_BSTR|VT_BYREF)]
wireBSTR * pbstrVal; /* VT_BYREF|VT_BSTR */
[case(VT_UNKNOWN|VT_BYREF)]
IUnknown ** ppunkVal; /* VT_BYREF|VT_UNKNOWN */
[case(VT_DISPATCH|VT_BYREF)]
IDispatch ** ppdispVal; /* VT_BYREF|VT_DISPATCH */
[case(VT_ARRAY|VT_BYREF)]
wireSAFEARRAY *pparray; /* VT_BYREF|VT_ARRAY */
[case(VT_VARIANT|VT_BYREF)]
wireVARIANT * pvarVal; /* VT_BYREF|VT_VARIANT */
[case(VT_I1)] CHAR cVal; /* VT_I1 */
[case(VT_UI2)] USHORT uiVal; /* VT_UI2 */
[case(VT_UI4)] ULONG ulVal; /* VT_UI4 */
[case(VT_INT)] INT intVal; /* VT_INT */
[case(VT_UINT)] UINT uintVal; /* VT_UINT */
[case(VT_DECIMAL)] DECIMAL decVal; /* VT_DECIMAL */
[case(VT_BYREF|VT_DECIMAL)]
DECIMAL * pdecVal; /* VT_BYREF|VT_DECIMAL */
[case(VT_BYREF|VT_I1)]
CHAR * pcVal; /* VT_BYREF|VT_I1 */
[case(VT_BYREF|VT_UI2)]
USHORT * puiVal; /* VT_BYREF|VT_UI2 */
[case(VT_BYREF|VT_UI4)]
ULONG * pulVal; /* VT_BYREF|VT_UI4 */
[case(VT_BYREF|VT_INT)]
INT * pintVal; /* VT_BYREF|VT_INT */
[case(VT_BYREF|VT_UINT)]
UINT * puintVal; /* VT_BYREF|VT_UINT */
[case(VT_EMPTY)] ; /* nothing */
[case(VT_NULL)] ; /* nothing */
};
};
//########################################################################
// End of VARIANT & SAFEARRAY
//########################################################################
//TypeInfo stuff.
typedef LONG DISPID;
typedef DISPID MEMBERID;
typedef DWORD HREFTYPE;
typedef [v1_enum] enum tagTYPEKIND {
TKIND_ENUM = 0,
TKIND_RECORD,
TKIND_MODULE,
TKIND_INTERFACE,
TKIND_DISPATCH,
TKIND_COCLASS,
TKIND_ALIAS,
TKIND_UNION,
TKIND_MAX /* end of enum marker */
} TYPEKIND;
typedef struct tagTYPEDESC {
[switch_type(VARTYPE), switch_is(vt)] union {
[case(VT_PTR, VT_SAFEARRAY)] struct tagTYPEDESC * lptdesc;
[case(VT_CARRAY)] struct tagARRAYDESC * lpadesc;
[case(VT_USERDEFINED)] HREFTYPE hreftype;
[default] ;
};
VARTYPE vt;
} TYPEDESC;
typedef struct tagARRAYDESC {
TYPEDESC tdescElem; /* element type */
USHORT cDims; /* dimension count */
[size_is(cDims)] SAFEARRAYBOUND rgbounds[]; /* var len array of bounds */
} ARRAYDESC;
// parameter description
typedef struct tagPARAMDESCEX {
ULONG cBytes; /* size of this structure */
VARIANTARG varDefaultValue; /* default value of this parameter */
} PARAMDESCEX, * LPPARAMDESCEX;
typedef struct tagPARAMDESC {
LPPARAMDESCEX pparamdescex; /* valid if PARAMFLAG_FHASDEFAULT bit is set */
USHORT wParamFlags; /* IN, OUT, etc */
} PARAMDESC, * LPPARAMDESC;
const USHORT PARAMFLAG_NONE = 0x00;
const USHORT PARAMFLAG_FIN = 0x01;
const USHORT PARAMFLAG_FOUT = 0x02;
const USHORT PARAMFLAG_FLCID = 0x04;
const USHORT PARAMFLAG_FRETVAL = 0x08;
const USHORT PARAMFLAG_FOPT = 0x10;
const USHORT PARAMFLAG_FHASDEFAULT = 0x20;
const USHORT PARAMFLAG_FHASCUSTDATA = 0x40;
typedef struct tagIDLDESC {
ULONG dwReserved;
USHORT wIDLFlags; /* IN, OUT, etc */
} IDLDESC, * LPIDLDESC;
const USHORT IDLFLAG_NONE = PARAMFLAG_NONE;
const USHORT IDLFLAG_FIN = PARAMFLAG_FIN;
const USHORT IDLFLAG_FOUT = PARAMFLAG_FOUT;
const USHORT IDLFLAG_FLCID = PARAMFLAG_FLCID;
const USHORT IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL;
cpp_quote("#if 0")
cpp_quote("/* the following is what MIDL knows how to remote */")
typedef struct tagELEMDESC { /* a format that MIDL likes */
TYPEDESC tdesc; /* the type of the element */
PARAMDESC paramdesc; /* IDLDESC is a subset of PARAMDESC */
} ELEMDESC;
cpp_quote("#else /* 0 */")
cpp_quote("typedef struct tagELEMDESC {")
cpp_quote(" TYPEDESC tdesc; /* the type of the element */")
cpp_quote(" union {")
cpp_quote(" IDLDESC idldesc; /* info for remoting the element */")
cpp_quote(" PARAMDESC paramdesc; /* info about the parameter */")
cpp_quote(" };")
cpp_quote("} ELEMDESC, * LPELEMDESC;")
cpp_quote("#endif /* 0 */")
typedef struct tagTYPEATTR {
GUID guid; /* the GUID of the TypeInfo */
LCID lcid; /* locale of member names and doc strings */
DWORD dwReserved;
MEMBERID memidConstructor; /* ID of constructor, MEMBERID_NIL if none */
MEMBERID memidDestructor; /* ID of destructor, MEMBERID_NIL if none */
LPOLESTR lpstrSchema;
ULONG cbSizeInstance; /* the size of an instance of this type */
TYPEKIND typekind; /* the kind of type this typeinfo describes */
WORD cFuncs; /* number of functions */
WORD cVars; /* number of variables / data members */
WORD cImplTypes; /* number of implemented interfaces */
WORD cbSizeVft; /* the size of this types virtual func table */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -