570 lines
14 KiB
Plaintext
570 lines
14 KiB
Plaintext
/*
|
|
* Copyright (C) 2005 Robert Shearman
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
|
*
|
|
*/
|
|
|
|
#pragma makedep ident
|
|
#pragma makedep typelib
|
|
|
|
import "ocidl.idl";
|
|
|
|
enum IWidget_dispids
|
|
{
|
|
DISPID_TM_NAME = 1,
|
|
DISPID_TM_DOSOMETHING,
|
|
DISPID_TM_STATE,
|
|
DISPID_TM_MAP,
|
|
DISPID_TM_SETOLECOLOR,
|
|
DISPID_TM_GETOLECOLOR,
|
|
DISPID_TM_CLONE,
|
|
DISPID_TM_CLONEDISPATCH,
|
|
DISPID_TM_CLONECOCLASS,
|
|
DISPID_TM_VALUE,
|
|
DISPID_TM_VARARRAYPTR,
|
|
DISPID_TM_VARARG,
|
|
DISPID_TM_ERROR,
|
|
DISPID_TM_CLONEINTERFACE,
|
|
DISPID_TM_TESTDUAL,
|
|
DISPID_TM_PROP_WITH_LCID,
|
|
DISPID_TM_PROP_INT,
|
|
DISPID_TM_PROP_UINT,
|
|
DISPID_TM_BYREF_UINT,
|
|
DISPID_TM_PROP_OPT_ARG,
|
|
DISPID_TM_PROP_REQ_ARG,
|
|
DISPID_TM_RESTRICTED,
|
|
DISPID_TM_TESTSECONDIFACE,
|
|
DISPID_TM_VARARG_RUN,
|
|
DISPID_TM_VARARG_REF_RUN,
|
|
|
|
DISPID_TM_BASETYPES_IN,
|
|
DISPID_TM_BASETYPES_OUT,
|
|
DISPID_TM_FLOAT_ABI,
|
|
DISPID_TM_INT_PTR,
|
|
DISPID_TM_INT_PTR_PTR,
|
|
DISPID_TM_IFACE_IN,
|
|
DISPID_TM_IFACE_OUT,
|
|
DISPID_TM_IFACE_PTR,
|
|
DISPID_TM_BSTR,
|
|
DISPID_TM_VARIANT,
|
|
DISPID_TM_SAFEARRAY,
|
|
DISPID_TM_STRUCT,
|
|
DISPID_TM_STRUCT_PTR_PTR,
|
|
DISPID_TM_THIN_STRUCT,
|
|
DISPID_TM_RECT,
|
|
DISPID_TM_COMPLEX_STRUCT,
|
|
DISPID_TM_ARRAY,
|
|
DISPID_TM_VARIANT_ARRAY,
|
|
DISPID_TM_STRUCT_ARRAY,
|
|
DISPID_TM_TYPEDEF,
|
|
DISPID_TM_COCLASS,
|
|
DISPID_TM_COCLASS_PTR,
|
|
};
|
|
|
|
static const int DISPID_TM_NEG_RESTRICTED = -26;
|
|
|
|
enum INonOleAutomation_dispids
|
|
{
|
|
DISPID_NOA_BSTRRET = 1,
|
|
DISPID_NOA_ERROR
|
|
};
|
|
|
|
[
|
|
uuid(d96d8a3e-78b6-4c8d-8f27-059db959be8a),
|
|
version(2.5),
|
|
helpstring("Test Typelib")
|
|
]
|
|
library TestTypelib
|
|
{
|
|
importlib("stdole2.tlb");
|
|
|
|
typedef enum tagSTATE
|
|
{
|
|
STATE_UNWIDGETIFIED = 1,
|
|
STATE_WIDGETIFIED
|
|
} STATE;
|
|
|
|
typedef struct tagMYSTRUCT
|
|
{
|
|
INT field1;
|
|
ULONGLONG field2;
|
|
UINT uarr[8];
|
|
} MYSTRUCT;
|
|
|
|
typedef [public] int myint_t;
|
|
|
|
typedef int array_t[4];
|
|
|
|
coclass ApplicationObject2;
|
|
|
|
[
|
|
odl,
|
|
oleautomation,
|
|
uuid(12345678-1234-4321-1234-121212121212)
|
|
]
|
|
interface ISomethingFromDispatch : IDispatch
|
|
{
|
|
HRESULT anotherfn(void);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
oleautomation,
|
|
dual,
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c7967)
|
|
]
|
|
interface ItestDual : IDispatch
|
|
{
|
|
HRESULT test();
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c7968)
|
|
]
|
|
interface ITestSecondIface : IUnknown
|
|
{
|
|
HRESULT test();
|
|
}
|
|
|
|
[
|
|
odl,
|
|
oleautomation,
|
|
dual,
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c7969)
|
|
]
|
|
interface ITestSecondDisp : IDispatch
|
|
{
|
|
HRESULT test();
|
|
}
|
|
|
|
[
|
|
oleautomation,
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c796a)
|
|
]
|
|
interface ICoclass1 : IDispatch
|
|
{
|
|
HRESULT test();
|
|
}
|
|
|
|
[
|
|
oleautomation,
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c796b)
|
|
]
|
|
interface ICoclass2 : IDispatch
|
|
{
|
|
HRESULT test();
|
|
}
|
|
|
|
[
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c796c)
|
|
]
|
|
coclass Coclass1
|
|
{
|
|
[default] interface ICoclass1;
|
|
interface ICoclass2;
|
|
}
|
|
|
|
[
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c796d)
|
|
]
|
|
coclass Coclass2
|
|
{
|
|
interface ICoclass1;
|
|
[default] interface ICoclass2;
|
|
}
|
|
|
|
[
|
|
uuid(3f7e06fe-0bce-46f0-8b7d-3a68393c796e)
|
|
]
|
|
coclass Coclass3
|
|
{
|
|
interface ICoclass1;
|
|
interface ICoclass2;
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(a1f8cae3-c947-4c5f-b57d-c87b9b5f3586),
|
|
oleautomation,
|
|
dual
|
|
]
|
|
interface IWidget : IDispatch
|
|
{
|
|
[propput, id(DISPID_TM_NAME)]
|
|
HRESULT Name([in] BSTR name);
|
|
[propget, id(DISPID_TM_NAME)]
|
|
HRESULT Name([out, retval] BSTR *name);
|
|
|
|
[id(DISPID_TM_DOSOMETHING)]
|
|
HRESULT DoSomething([in] double number, [out] BSTR *str1, [in, defaultvalue("")] BSTR str2, [in, optional] VARIANT *opt);
|
|
|
|
[propget, id(DISPID_TM_STATE)]
|
|
HRESULT State([out, retval] STATE *state);
|
|
[propput, id(DISPID_TM_STATE)]
|
|
HRESULT State([in] STATE state);
|
|
|
|
[id(DISPID_TM_MAP)]
|
|
HRESULT Map([in] BSTR bstrId, [out, retval] BSTR *sValue);
|
|
|
|
[id(DISPID_TM_SETOLECOLOR)]
|
|
HRESULT SetOleColor([in] OLE_COLOR val);
|
|
|
|
[id(DISPID_TM_GETOLECOLOR)]
|
|
HRESULT GetOleColor([out, retval] OLE_COLOR *pVal);
|
|
|
|
[propget, id(DISPID_TM_CLONE)]
|
|
HRESULT Clone([out, retval] IWidget **ppVal);
|
|
|
|
[propget, id(DISPID_TM_CLONEDISPATCH)]
|
|
HRESULT CloneDispatch([out, retval] IDispatch **ppVal);
|
|
|
|
[propget, id(DISPID_TM_CLONECOCLASS)]
|
|
HRESULT CloneCoclass([out, retval] ApplicationObject2 **ppVal);
|
|
|
|
[propget, id(DISPID_VALUE)]
|
|
HRESULT Value([in] VARIANT *value, [out, retval] VARIANT *retval);
|
|
|
|
[id(DISPID_TM_VARARRAYPTR)]
|
|
HRESULT VariantArrayPtr([in] SAFEARRAY(VARIANT) *values);
|
|
|
|
[vararg, id(DISPID_TM_VARARG)]
|
|
HRESULT VarArg([in] int numexpect, [in] SAFEARRAY(VARIANT) values);
|
|
|
|
[id(DISPID_TM_ERROR)]
|
|
HRESULT Error();
|
|
|
|
[propget, id(DISPID_TM_CLONEINTERFACE)]
|
|
HRESULT CloneInterface([out, retval] ISomethingFromDispatch **ppVal);
|
|
|
|
[id(DISPID_TM_PROP_WITH_LCID), propput]
|
|
HRESULT prop_with_lcid([in,lcid] long lcid, [in] INT i);
|
|
|
|
[id(DISPID_TM_PROP_WITH_LCID), propget]
|
|
HRESULT prop_with_lcid([in,lcid] long lcid, [out,retval] INT *i);
|
|
|
|
[id(DISPID_TM_PROP_INT), propget]
|
|
HRESULT prop_int([out,retval] INT *i);
|
|
|
|
[id(DISPID_TM_PROP_UINT), propget]
|
|
HRESULT prop_uint([out,retval] UINT *i);
|
|
|
|
[id(DISPID_TM_BYREF_UINT)]
|
|
HRESULT ByRefUInt([in, out] UINT *i);
|
|
|
|
[id(DISPID_TM_PROP_OPT_ARG), propput]
|
|
HRESULT prop_opt_arg([in,optional] INT opt, [in] INT i);
|
|
|
|
[id(DISPID_TM_PROP_REQ_ARG), propput]
|
|
HRESULT prop_req_arg([in] INT req, [in] INT i);
|
|
|
|
[id(DISPID_TM_RESTRICTED), restricted]
|
|
HRESULT pos_restrict([out, retval] INT *i);
|
|
|
|
[id(DISPID_TM_NEG_RESTRICTED), restricted]
|
|
HRESULT neg_restrict([out, retval] INT *i);
|
|
|
|
[id(DISPID_TM_VARARG_RUN), vararg]
|
|
HRESULT VarArg_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) params, [out, retval] VARIANT *result);
|
|
|
|
[id(DISPID_TM_VARARG_REF_RUN), vararg]
|
|
HRESULT VarArg_Ref_Run([in] BSTR name, [in] SAFEARRAY(VARIANT) *params, [out, retval] VARIANT *result);
|
|
|
|
[id(DISPID_TM_BASETYPES_IN)]
|
|
HRESULT basetypes_in([in] signed char c, [in] short s, [in] int i, [in] hyper h,
|
|
[in] unsigned char uc, [in] unsigned short us, [in] unsigned int ui,
|
|
[in] unsigned hyper uh, [in] float f, [in] double d, [in] STATE st);
|
|
|
|
[id(DISPID_TM_BASETYPES_OUT)]
|
|
HRESULT basetypes_out([out] signed char *c, [out] short *s, [out] int *i, [out] hyper *h,
|
|
[out] unsigned char *uc, [out] unsigned short *us, [out] unsigned int *ui,
|
|
[out] unsigned hyper *uh, [out] float *f, [out] double *d, [out] STATE *st);
|
|
|
|
[id(DISPID_TM_FLOAT_ABI)]
|
|
HRESULT float_abi([in] float f, [in] double d, [in] int i, [in] float f2, [in] double d2);
|
|
|
|
[id(DISPID_TM_INT_PTR)]
|
|
HRESULT int_ptr([in] int *in, [out] int *out, [in, out] int *in_out);
|
|
|
|
[id(DISPID_TM_INT_PTR_PTR)]
|
|
HRESULT int_ptr_ptr([in] int **in, [out] int **out, [in, out] int **in_out);
|
|
|
|
[id(DISPID_TM_IFACE_IN)]
|
|
HRESULT iface_in([in] IUnknown *unk, [in] IDispatch *disp, [in] ISomethingFromDispatch *sfd);
|
|
|
|
[id(DISPID_TM_IFACE_OUT)]
|
|
HRESULT iface_out([out] IUnknown **unk, [out] IDispatch **disp, [out] ISomethingFromDispatch **sfd);
|
|
|
|
[id(DISPID_TM_IFACE_PTR)]
|
|
HRESULT iface_ptr([in] ISomethingFromDispatch **in, [out] ISomethingFromDispatch **out, [in, out] ISomethingFromDispatch **in_out);
|
|
|
|
[id(DISPID_TM_BSTR)]
|
|
HRESULT bstr([in] BSTR in, [out] BSTR *out, [in] BSTR *in_ptr, [in, out] BSTR *in_out);
|
|
|
|
[id(DISPID_TM_VARIANT)]
|
|
HRESULT variant([in] VARIANT in, [out] VARIANT *out, [in] VARIANT *in_ptr, [in, out] VARIANT *in_out);
|
|
|
|
[id(DISPID_TM_SAFEARRAY)]
|
|
HRESULT safearray([in] SAFEARRAY(int) in, [out] SAFEARRAY(int) *out, [in] SAFEARRAY(int) *in_ptr, [in, out] SAFEARRAY(int) *in_out);
|
|
|
|
[id(DISPID_TM_STRUCT)]
|
|
HRESULT mystruct([in] MYSTRUCT in, [out] MYSTRUCT *out, [in] MYSTRUCT *in_ptr, [in, out] MYSTRUCT *in_out);
|
|
|
|
[id(DISPID_TM_STRUCT_PTR_PTR)]
|
|
HRESULT mystruct_ptr_ptr([in] MYSTRUCT **in);
|
|
|
|
struct thin
|
|
{
|
|
short a;
|
|
char b;
|
|
};
|
|
|
|
[id(DISPID_TM_THIN_STRUCT)]
|
|
HRESULT thin_struct([in] struct thin in);
|
|
|
|
[id(DISPID_TM_RECT)]
|
|
HRESULT rect([in] RECT in, [out] RECT *out, [in] RECT *in_ptr, [in, out] RECT *in_out);
|
|
|
|
struct complex
|
|
{
|
|
char c;
|
|
int i;
|
|
int *pi;
|
|
int **ppi;
|
|
ISomethingFromDispatch *iface;
|
|
ISomethingFromDispatch **iface_ptr;
|
|
BSTR bstr;
|
|
VARIANT var;
|
|
MYSTRUCT mystruct;
|
|
array_t arr;
|
|
myint_t myint;
|
|
};
|
|
|
|
[id(DISPID_TM_COMPLEX_STRUCT)]
|
|
HRESULT complex_struct([in] struct complex in);
|
|
|
|
[id(DISPID_TM_ARRAY)]
|
|
HRESULT array([in] array_t in, [out] array_t out, [in, out] array_t in_out);
|
|
|
|
[id(DISPID_TM_VARIANT_ARRAY)]
|
|
HRESULT variant_array([in] VARIANT in[2], [out] VARIANT out[2], [in, out] VARIANT in_out[2]);
|
|
|
|
[id(DISPID_TM_STRUCT_ARRAY)]
|
|
HRESULT mystruct_array([in] MYSTRUCT in[2]);
|
|
|
|
[id(DISPID_TM_TYPEDEF)]
|
|
HRESULT myint([in] myint_t val, [in] myint_t *ptr, [in] myint_t **ptr_ptr);
|
|
|
|
[id(DISPID_TM_COCLASS)]
|
|
HRESULT Coclass([in] Coclass1 *class1, [in] Coclass2 *class2, [in] Coclass3 *class3);
|
|
|
|
[id(DISPID_TM_COCLASS_PTR)]
|
|
HRESULT Coclass_ptr([in] Coclass1 **in, [out] Coclass1 **out, [in, out] Coclass1 **in_out);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(a1f8cae3-c947-3c5f-a57c-c88b9b6f3586),
|
|
oleautomation,
|
|
dual
|
|
]
|
|
interface IStaticWidget : IDispatch
|
|
{
|
|
[id(DISPID_TM_TESTDUAL)]
|
|
HRESULT TestDual([in] ItestDual *p);
|
|
|
|
[id(DISPID_TM_TESTSECONDIFACE)]
|
|
HRESULT TestSecondIface([in] ITestSecondIface *p);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(a028db05-30f0-4b93-b17a-41c72f831d84),
|
|
dual,
|
|
oleautomation
|
|
]
|
|
interface IKindaEnumWidget : IUnknown
|
|
{
|
|
HRESULT Next(
|
|
[out] IWidget **widget);
|
|
|
|
HRESULT Count(
|
|
[out] unsigned long *count);
|
|
|
|
HRESULT Reset();
|
|
|
|
HRESULT Clone(
|
|
[out] IKindaEnumWidget **ppenum);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(a028db06-30f0-4b93-b17a-41c72f831d84),
|
|
]
|
|
interface INonOleAutomation : IUnknown
|
|
{
|
|
[id(DISPID_NOA_BSTRRET)]
|
|
BSTR BstrRet();
|
|
|
|
[id(DISPID_NOA_ERROR)]
|
|
HRESULT Error();
|
|
}
|
|
|
|
|
|
[
|
|
dllname("comm.drv"),
|
|
uuid(d377f60b-8639-4261-8ee7-75c8340d2cc9),
|
|
]
|
|
module BadModule
|
|
{
|
|
[
|
|
entry("Foo"),
|
|
]
|
|
HRESULT BadModuleFoo();
|
|
};
|
|
|
|
[
|
|
dllname("oleaut32.dll"),
|
|
uuid(d377f60c-8639-4261-8ee7-75c8340d2cc9),
|
|
]
|
|
module BadEntry
|
|
{
|
|
[
|
|
entry("Foo"),
|
|
]
|
|
HRESULT BadEntryFoo();
|
|
};
|
|
|
|
[
|
|
uuid(bb171948-10ec-407a-9a57-2f85f797ff1a),
|
|
appobject,
|
|
]
|
|
coclass ApplicationObject2
|
|
{
|
|
interface IWidget;
|
|
[source] interface IWidget;
|
|
};
|
|
|
|
[
|
|
odl,
|
|
uuid(375f8a9d-33d0-44f3-b972-61f8407899e0)
|
|
]
|
|
interface ItestIF1 : IUnknown
|
|
{
|
|
HRESULT fn1([in] int x);
|
|
HRESULT fn2([out,retval] int *x);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(094056a3-666f-4956-be12-1859668310b8)
|
|
]
|
|
interface ItestIF2 : ItestIF1
|
|
{
|
|
HRESULT fn3([in] int y);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(33baba09-2e68-43ab-81fe-d84b403df2e5)
|
|
]
|
|
dispinterface ItestIF3
|
|
{
|
|
interface ItestIF2;
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(a01005c7-7491-42eb-94f3-668e37ce60a6)
|
|
]
|
|
dispinterface ItestIF4
|
|
{
|
|
properties:
|
|
methods:
|
|
[id(0x1c)] HRESULT fn([in] int z);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(4ab61e25-c09f-4239-8f7f-7a018ea0199f),
|
|
dual
|
|
]
|
|
interface ItestIF5 : ItestIF2
|
|
{
|
|
[id(0x1234)] HRESULT fn4([in] int a);
|
|
[id(0x1235)] HRESULT fn5([in] int a);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(ec236d8e-2cc7-44f2-b394-36c86ff3da74)
|
|
]
|
|
interface ItestIF6 : IDispatch
|
|
{
|
|
[id(0x1234)] HRESULT fn4([in] int a);
|
|
[id(0x1235)] HRESULT fn5([in] int a);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(f711b105-554d-4751-818c-46fcc5d7c0d5),
|
|
dual
|
|
]
|
|
interface ItestIF7 : ItestIF6
|
|
{
|
|
[id(0x1236)] HRESULT fn6([in] GUID a);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(bdfa260b-ef40-43d3-b071-cddec919f132)
|
|
]
|
|
interface ItestIF8
|
|
{
|
|
HRESULT fn1([in] int x);
|
|
HRESULT fn2([out,retval] int *x);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(51033a23-dc37-4f19-aa34-4d8a670458a0)
|
|
|
|
]
|
|
interface ItestIF9 : ItestIF8
|
|
{
|
|
HRESULT fn3([in] int y);
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(2e8f14fe-0bce-42f0-8b7d-3af8393c7967)
|
|
]
|
|
dispinterface ItestIF10
|
|
{
|
|
interface ItestIF9;
|
|
}
|
|
|
|
[
|
|
odl,
|
|
uuid(7d9e9371-482e-4944-9b19-511fc705236f)
|
|
]
|
|
dispinterface ItestIF11
|
|
{
|
|
interface ItestIF7;
|
|
}
|
|
|
|
};
|