comCoreTypes.idl
上传用户:baixin
上传日期:2008-03-13
资源大小:4795k
文件大小:14k
开发平台:

MultiPlatform

  1. /* comCoreTypes.idl -- VxDCOM base definitions */
  2. /* Copyright (c) 1999-2001, Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 02i,10dec01,dbs  diab build
  7. 02h,18oct01,nel  Correct def of CY type to conform to Microsoft spec.
  8. 02g,11oct01,nel  Add conditional define for SIMNT build.
  9. 02f,07aug01,dbs  return multiple interfaces during creation
  10. 02e,06aug01,dbs  add registry-show capability
  11. 02d,17jul01,dbs  fix widl_marshal attributes
  12. 02c,21jun01,dbs  add IMalloc interface
  13. 02b,20jun01,dbs  remove obsolete typedefs
  14. 02a,20jun01,nel  Remove SafeArray and VARIANT defs to new files.
  15. 01a,20jun01,dbs  created from WindTypes.idl
  16. */
  17. [
  18. uuid(5E0645F9-6F69-11d3-A821-00C04F68A5B5),
  19. pointer_default(unique),
  20. local
  21. ]
  22. interface IWindTypes
  23.     {
  24. /*
  25.  * Some typedefs not required at the C level.
  26.  */
  27. cpp_quote("#if 0")
  28. cpp_quote("/* These types are defined by the OS (vxWorks.h) */")
  29. typedef unsigned char   UCHAR;
  30. typedef unsigned short  USHORT;
  31. typedef unsigned long   ULONG;
  32. typedef int BOOL;
  33. typedef unsigned int UINT;
  34. cpp_quote("#endif")
  35. cpp_quote("#if !(defined (CPU) && defined (SIMNT) && (CPU == SIMNT))")
  36. cpp_quote("/* These are defined by the SIMNT BSP */")
  37. typedef short           WORD;
  38. typedef unsigned long   DWORD;
  39. cpp_quote("#endif")
  40. typedef unsigned char BYTE;
  41. typedef char CHAR;
  42. typedef short           SHORT;
  43. typedef long LONG;
  44. typedef float FLOAT;
  45. typedef double          DOUBLE;
  46. typedef long SCODE;
  47. typedef long HRESULT;
  48. typedef int INT;
  49. typedef unsigned short WCHAR;
  50. typedef unsigned short OLECHAR;
  51. typedef void* PVOID;
  52. typedef void* LPVOID;
  53. // VxDCOM does not use the wchar_t as it varies from one architecture
  54. // to another, instead it uses unsigned short as WCHAR.
  55. typedef [string] OLECHAR* LPOLESTR;
  56. typedef [string] WCHAR* LPWSTR;
  57. typedef [string] const OLECHAR* LPCOLESTR;
  58. typedef [string] const WCHAR* LPCWSTR;
  59.  
  60. cpp_quote("typedef long long LONGLONG;")
  61. cpp_quote("typedef long unsigned long ULONGLONG;")
  62. cpp_quote("#if 0")
  63. typedef hyper LONGLONG;
  64. typedef unsigned hyper ULONGLONG;
  65. cpp_quote("#else")
  66. cpp_quote("typedef LONGLONG hyper;")
  67. cpp_quote("typedef ULONGLONG uhyper;")
  68. cpp_quote("#endif")
  69. typedef LONGLONG LARGE_INTEGER;
  70. typedef ULONGLONG ULARGE_INTEGER;
  71. typedef struct _tagCY
  72.     {
  73.     LONGLONG int64;
  74.     } CY;
  75. typedef LONGLONG        OID;
  76. typedef LONGLONG        OXID;
  77. typedef unsigned short PROTSEQ;
  78.  
  79. cpp_quote("/* Basic IDL types */") 
  80. cpp_quote("typedef unsigned char byte;")
  81. cpp_quote("typedef unsigned char uchar;")
  82. //cpp_quote("typedef unsigned short ushort;")
  83. cpp_quote("typedef unsigned long ulong;")
  84.     
  85. typedef struct _FILETIME
  86.     {
  87.     DWORD dwLowDateTime;
  88.     DWORD dwHighDateTime;
  89.     } FILETIME, *PFILETIME, *LPFILETIME;
  90. typedef struct _SYSTEMTIME
  91.     {
  92.     WORD wYear;
  93.     WORD wMonth;
  94.     WORD wDayOfWeek;
  95.     WORD wDay;
  96.     WORD wHour;
  97.     WORD wMinute;
  98.     WORD wSecond;
  99.     WORD wMilliseconds;
  100.     } SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
  101. typedef struct _SECURITY_ATTRIBUTES
  102.     {
  103.     DWORD nLength;
  104.     [size_is(nLength)] LPVOID lpSecurityDescriptor;
  105.     BOOL bInheritHandle;
  106.     } SECURITY_ATTRIBUTES, *PSECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
  107. typedef USHORT SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
  108. typedef PVOID PSID;      
  109. typedef struct _ACL
  110.     {
  111.     UCHAR AclRevision;
  112.     UCHAR Sbz1;
  113.     USHORT AclSize;
  114.     USHORT AceCount;
  115.     USHORT Sbz2;
  116.     } ACL;
  117. typedef ACL *PACL;
  118. typedef struct _SECURITY_DESCRIPTOR
  119.     {
  120.     UCHAR Revision;
  121.     UCHAR Sbz1;
  122.     SECURITY_DESCRIPTOR_CONTROL Control;
  123.     PSID Owner;
  124.     PSID Group;
  125.     PACL Sacl;
  126.     PACL Dacl;
  127.     } SECURITY_DESCRIPTOR, *PISECURITY_DESCRIPTOR;
  128. typedef struct _COAUTHIDENTITY
  129.     {
  130.     [string] LPWSTR User;
  131.     ULONG UserLength;
  132.     [string] LPWSTR Domain;
  133.     ULONG DomainLength;
  134.     [string] LPWSTR Password;
  135.     ULONG PasswordLength;
  136.     ULONG Flags;
  137.     } COAUTHIDENTITY;
  138. typedef struct _COAUTHINFO
  139.     {
  140.     DWORD               dwAuthnSvc;
  141.     DWORD               dwAuthzSvc;
  142.     LPWSTR              pwszServerPrincName;
  143.     DWORD               dwAuthnLevel;
  144.     DWORD               dwImpersonationLevel;
  145.     COAUTHIDENTITY *    pAuthIdentityData;
  146.     DWORD               dwCapabilities;
  147.     } COAUTHINFO;
  148. typedef struct _COSERVERINFO
  149.     {
  150.     DWORD           dwReserved1;
  151.     LPWSTR          pwszName;
  152.     COAUTHINFO *    pAuthInfo;
  153.     DWORD           dwReserved2;
  154.     } COSERVERINFO;
  155. /* GUID Definition */
  156. cpp_quote("#ifndef GUID_DEFINED")
  157. cpp_quote("#define GUID_DEFINED")
  158. typedef struct _GUID
  159.     {
  160.     DWORD Data1;
  161.     WORD  Data2;
  162.     WORD  Data3;
  163.     BYTE  Data4[8];
  164.     } GUID, *LPGUID;
  165.     cpp_quote("#endif /* !GUID_DEFINED */")
  166. cpp_quote("extern const GUID GUID_NULL;")
  167. /* IID Definition */
  168. cpp_quote("#define IID_NULL GUID_NULL")
  169. typedef GUID IID;
  170. typedef IID* LPIID;
  171. cpp_quote("#define __IID_DEFINED__")
  172. /* CLSID Definition */ 
  173. typedef GUID CLSID;
  174. typedef CLSID* LPCLSID;
  175. cpp_quote("#define CLSID_NULL GUID_NULL")
  176. /* IPID Definition */
  177. typedef GUID IPID;
  178. typedef IPID* LPIPID;
  179. /* CATID Definition */ 
  180. typedef GUID CATID;
  181. typedef CATID* LPCATID;
  182. cpp_quote("#define CATID_NULL GUID_NULL")
  183. /*
  184.   Here, we use the WIDL-specific attribute [cpp_ref] to indicate that
  185.   a pointer should be treated as a C++ reference-type. In plain old C
  186.   this will still look like a pointer, but in C++ it will look like a
  187.   reference type.
  188. */
  189. typedef [cpp_ref] const GUID* REFGUID;
  190. typedef [cpp_ref] const IID* REFIID;
  191. typedef [cpp_ref] const CLSID* REFCLSID;
  192. typedef [cpp_ref] const IPID* REFIPID;
  193. typedef enum tagCLSCTX
  194.     {
  195. CLSCTX_INPROC_SERVER = 0x01,    
  196. CLSCTX_INPROC_HANDLER = 0x02,   
  197. CLSCTX_LOCAL_SERVER = 0x04,     
  198. CLSCTX_INPROC_SERVER16 = 0x08,  
  199. CLSCTX_REMOTE_SERVER = 0x10,     
  200. CLSCTX_INPROC_HANDLER16 = 0x20,  
  201. CLSCTX_INPROC_SERVERX86 = 0x40,  
  202. CLSCTX_INPROC_HANDLERX86 = 0x80
  203.     } CLSCTX;
  204. typedef enum tagMSHLFLAGS
  205.     {
  206.         MSHLFLAGS_NORMAL = 0,        
  207.         MSHLFLAGS_TABLESTRONG = 1,   
  208. MSHLFLAGS_TABLEWEAK = 2,     
  209. MSHLFLAGS_NOPING = 4      
  210.     } MSHLFLAGS;
  211.  
  212. typedef enum tagMSHCTX
  213.     {
  214. MSHCTX_LOCAL = 0,            
  215. MSHCTX_NOSHAREDMEM = 1,      
  216. MSHCTX_DIFFERENTMACHINE = 2, 
  217. MSHCTX_INPROC = 3
  218.     } MSHCTX;
  219.  
  220. typedef DWORD LCID;
  221. typedef struct _BYTE_BLOB
  222.     {
  223.                         unsigned long   clSize;
  224.     [size_is(clSize)]   byte            abData[];
  225.     } BYTE_BLOB;
  226. typedef [unique] BYTE_BLOB * UP_BYTE_BLOB;
  227. typedef struct _WORD_BLOB
  228.     {
  229.                         unsigned long   clSize;
  230.     [size_is(clSize)]   unsigned short  asData[];
  231.     } WORD_BLOB;
  232. typedef [unique] WORD_BLOB * UP_WORD_BLOB;
  233. typedef struct _DWORD_BLOB
  234.     {
  235.                         unsigned long   clSize;
  236.     [size_is(clSize)]   unsigned long   alData[];
  237.     } DWORD_BLOB;
  238. typedef [unique] DWORD_BLOB * UP_DWORD_BLOB;
  239. typedef struct _FLAGGED_BYTE_BLOB
  240.     {
  241.                         unsigned long   fFlags;
  242.                         unsigned long   clSize;
  243.     [size_is(clSize)]   byte            abData[];
  244.     } FLAGGED_BYTE_BLOB;
  245. typedef [unique] FLAGGED_BYTE_BLOB * UP_FLAGGED_BYTE_BLOB;
  246. typedef struct _FLAGGED_WORD_BLOB {
  247.                         unsigned long   fFlags;
  248.                         unsigned long   clSize;
  249.     [size_is(clSize)]   unsigned short  asData[];
  250. } FLAGGED_WORD_BLOB;
  251. typedef [unique] FLAGGED_WORD_BLOB * UP_FLAGGED_WORD_BLOB;
  252. typedef struct _BYTE_SIZEDARR
  253.     {
  254.                         unsigned long   clSize;
  255.     [size_is(clSize)]   byte     *      pData ;
  256.     } BYTE_SIZEDARR;
  257. typedef struct _SHORT_SIZEDARR
  258.     {
  259.                         unsigned long   clSize;
  260.     [size_is(clSize)]   unsigned short* pData ;
  261.     } WORD_SIZEDARR;
  262. typedef struct _LONG_SIZEDARR
  263.     {
  264.                         unsigned long   clSize;
  265.     [size_is(clSize)]   unsigned long * pData ;
  266.     } DWORD_SIZEDARR;
  267. typedef struct _HYPER_SIZEDARR
  268.     {
  269.                         unsigned long   clSize;
  270.     [size_is(clSize)]   hyper         * pData ;
  271.     } HYPER_SIZEDARR;
  272. typedef double DATE;
  273. typedef struct tagDEC {
  274.     USHORT wReserved;
  275.     BYTE  scale;
  276.     BYTE  sign;
  277.     ULONG Hi32;
  278.     ULONGLONG Lo64;
  279. } DECIMAL;
  280. // BSTR marshaling is handled by WIDL internally
  281. typedef [widl_marshal(bstr)] OLECHAR *  BSTR;
  282. typedef BSTR * LPBSTR;
  283. cpp_quote("/* 0 == FALSE, -1 == TRUE */")
  284. typedef short VARIANT_BOOL;
  285. cpp_quote("typedef BYTE boolean;")
  286. cpp_quote("#if 0")
  287. typedef boolean BOOLEAN;
  288. cpp_quote("#endif")
  289.     
  290. cpp_quote("#define VARIANT_TRUE ((VARIANT_BOOL)0xffff)")
  291. cpp_quote("#define VARIANT_FALSE ((VARIANT_BOOL)0)")
  292. typedef struct tagBLOB
  293.     {
  294.     ULONG cbSize;
  295.     [size_is(cbSize)]
  296.     BYTE  *pBlobData;
  297.     } BLOB, * LPBLOB;
  298. typedef ULONG PROPID;
  299.     }
  300. //
  301. // This interface (IUnknown) is the base interface of all COM objects.
  302. //
  303. [
  304.   local,
  305.   object,
  306.   uuid(00000000-0000-0000-C000-000000000046),
  307.   pointer_default(unique)
  308. ]
  309. interface IUnknown
  310.     {
  311.     typedef [unique] IUnknown *LPUNKNOWN;
  312.     HRESULT QueryInterface(
  313.         [in] REFIID riid,
  314.         [out, iid_is(riid)] void **ppvObject);
  315.     ULONG AddRef();
  316.     ULONG Release();
  317.     }
  318. //
  319. // This interface (IClassFactory) requires special treatment (the
  320. // method CreateInstance() is marshaled quite differently, as if its
  321. // signature were:-
  322. //
  323. // HRESULT CreateInstance ([in] REFIID riid, [out, iid_is(riid)] IUnknown** ppObj);
  324. //
  325. // It is given the [local] attribute here so that WIDL does not
  326. // generate proxy/stubs for it, but the p/s is in fact hard-coded
  327. // elsewhere in the DCOM implementation.
  328. //
  329. [
  330.     object,
  331.     local,
  332.     uuid(00000001-0000-0000-C000-000000000046),
  333.     pointer_default(unique)
  334. ]
  335. interface IClassFactory : IUnknown
  336.     {
  337.     typedef [unique] IClassFactory * LPCLASSFACTORY;
  338.     HRESULT CreateInstance
  339. (
  340.         [in, unique] IUnknown * pUnkOuter,
  341.         [in] REFIID riid,
  342.         [out, iid_is(riid)] void **ppvObject
  343. );
  344.     HRESULT LockServer ([in] BOOL fLock);
  345.     }
  346. //
  347. // This interface allows multiple remote QI operations at one time.
  348. //
  349. [
  350.     object,
  351.     local,
  352.     uuid(00000020-0000-0000-C000-000000000046)
  353. ]
  354. interface IMultiQI : IUnknown
  355.     {
  356.     typedef [unique] IMultiQI* LPMULTIQI;
  357.     typedef struct tagMULTI_QI
  358. {
  359.         const IID  *pIID;  
  360.         IUnknown   *pItf;  
  361.         HRESULT     hr;
  362. } MULTI_QI;
  363.     HRESULT QueryMultipleInterfaces
  364. (
  365.         [in]     ULONG      cMQIs,
  366.         [in,out] MULTI_QI  *pMQIs
  367. );
  368.     }
  369. //
  370. // This interface (IRegistry) is used internally by comCoreLib and
  371. // VxCOM for registration of coclasses.
  372. //
  373. [
  374.     uuid(a01ccc02-cfeb-4311-8ebc-d7edb4a8de9c),
  375.     pointer_default(unique),
  376.     local,
  377.     object
  378. ]
  379. interface IRegistry : IUnknown
  380.     {
  381.     /*
  382.      * RegisterClass - registers a GetClassObject() function pointer
  383.      * against the given CLSID in this registry.
  384.      */
  385.     HRESULT RegisterClass
  386.         (
  387.         [in] REFCLSID           clsid,
  388.         [in] void *             pfnGetClassObject
  389.         );
  390.     /*
  391.      * IsClassRegistered - determines if the CLSID is known to this
  392.      * registry. Returns S_OK if it is, or S_FALSE if not. Other
  393.      * failure values may be returned if appropriate.
  394.      */
  395.     HRESULT IsClassRegistered
  396.         (
  397.         [in] REFCLSID           clsid
  398.         );
  399.     /*
  400.      * CreateInstance - creates an instance of the class given by
  401.      * <clsid>, with the interface given by <iid>, using the <hint>
  402.      * argument if necessary, and returns the new object's interface
  403.      * pointer in the variable pointed to by <ppObj>.
  404.      */
  405.     HRESULT CreateInstance
  406.         (
  407.         [in] REFCLSID           clsid,
  408.         [in] IUnknown *         pUnkOuter,
  409.         [in] DWORD              dwClsContext,
  410.         [in] const char *       hint,
  411.         [in] ULONG              cMQIs,
  412.         [in,out] MULTI_QI *     pMQIs
  413.         );
  414.     /*
  415.      * GetClassObject - returns an instance of the class-object for
  416.      * the given <clsid>. The <iid> parameter indicates which
  417.      * interface on the class-object is to be returned, and is usually
  418.      * (though not always) IClassFactory.
  419.      */
  420.     HRESULT GetClassObject
  421.         (
  422.         [in] REFCLSID           clsid,
  423.         [in] REFIID             iid,
  424.         [in] DWORD              dwClsContext,
  425.         [in] const char *       hint,
  426.         [out, iid_is(iid)] IUnknown ** ppClsObj
  427.         );
  428.     /*
  429.      * This method allows a client to read back the CLSIDs held by
  430.      * this registry. The 'dwIndex' parameter identifies the position
  431.      * in the registry to read, if out of range it will return E_FAIL. 
  432.      */
  433.     HRESULT GetClassID
  434.         (
  435.         [in] DWORD              dwIndex,
  436.         [out] LPCLSID           pclsid
  437.         );        
  438.     
  439.     };
  440. [
  441.     object,
  442.     uuid(0002E000-0000-0000-C000-000000000046),
  443.     pointer_default(unique)
  444. ]
  445. interface IEnumGUID : IUnknown
  446.     {
  447.     typedef [unique] IEnumGUID *LPENUMGUID;
  448.     HRESULT Next
  449. (
  450. [in] ULONG celt,
  451. [out, size_is(celt), length_is(*pceltFetched)] GUID *rgelt,
  452. [out] ULONG *pceltFetched
  453. );
  454.     HRESULT Skip ([in] ULONG celt);
  455.     HRESULT Reset ();
  456.     HRESULT Clone ([out] IEnumGUID **ppenum);
  457.     }
  458. [
  459.     object,
  460.     uuid(00000101-0000-0000-C000-000000000046),
  461.     pointer_default(unique)
  462. ]
  463. interface IEnumString : IUnknown
  464.     {
  465.     typedef [unique] IEnumString *LPENUMSTRING;
  466.     HRESULT Next
  467. (
  468.         [in] ULONG celt,
  469.         [out, size_is(celt), length_is(*pceltFetched)]
  470.         LPOLESTR *rgelt,
  471.         [out] ULONG *pceltFetched
  472. );
  473.     HRESULT Skip ([in] ULONG celt);
  474.     HRESULT Reset ();
  475.     HRESULT Clone ([out] IEnumString **ppenum);
  476.     }
  477. [
  478.     object,
  479.     uuid(00000100-0000-0000-C000-000000000046),
  480.     pointer_default(unique)
  481. ]
  482. interface IEnumUnknown : IUnknown
  483.     {
  484.     typedef [unique] IEnumUnknown *LPENUMUNKNOWN;
  485.     HRESULT Next(
  486.         [in] ULONG celt,
  487.         [out, size_is(celt), length_is(*pceltFetched)]
  488.         IUnknown **rgelt,
  489.         [out] ULONG *pceltFetched);
  490.     HRESULT Skip ([in] ULONG celt);
  491.     HRESULT Reset ();
  492.     HRESULT Clone ([out] IEnumUnknown **ppenum);
  493. }
  494. [
  495.     object,
  496.     local,
  497.     uuid(00000002-0000-0000-C000-000000000046),
  498.     pointer_default(unique)
  499. ]
  500. interface IMalloc : IUnknown
  501.     {
  502.     void* Alloc ([in] ULONG cb);        
  503.     void* Realloc ([in] void *pv, [in] ULONG cb);
  504.     void  Free ([in] void *pv);
  505.     ULONG GetSize ([in] void *pv);
  506.     int   DidAlloc ([in] void *pv);
  507.     void  HeapMinimize ();        
  508.     };