Merge pull request #14619 from briansull/emitter-cleanup
[platform/upstream/coreclr.git] / src / vm / stdinterfaces.h
1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 //---------------------------------------------------------------------------------
5 // stdinterfaces.h
6 //
7 // Defines various standard com interfaces , refer to stdinterfaces.cpp for more documentation
8
9 //---------------------------------------------------------------------------------
10
11 #ifndef _H_STDINTERFACES_
12 #define _H_STDINTERFACES_
13
14 #ifndef FEATURE_COMINTEROP
15 #error FEATURE_COMINTEROP is required for this file
16 #endif // FEATURE_COMINTEROP
17
18 #include "dispex.h"
19 #include "weakreference.h"
20 #include "common.h"
21
22 extern const IID IID_IWeakReferenceSource;
23 extern const IID IID_IWeakReference;
24 extern const IID IID_ICustomPropertyProvider;
25 extern const IID IID_ICCW;
26
27 // Until the Windows SDK is updated, just hard-code the IAgileObject IID
28 #ifndef __IAgileObject_INTERFACE_DEFINED__
29 DEFINE_GUID(IID_IAgileObject,0x94ea2b94,0xe9cc,0x49e0,0xc0,0xff,0xee,0x64,0xca,0x8f,0x5b,0x90);
30 MIDL_INTERFACE("94ea2b94-e9cc-49e0-c0ff-ee64ca8f5b90")
31 IAgileObject : public IUnknown
32 {
33 public:
34 };
35 #endif // !__IAgileObject_INTERFACE_DEFINED__
36
37 // Until the Windows SDK is updated, just hard-code the INoMarshal IID
38 #ifndef __INoMarshal_INTERFACE_DEFINED__
39 DEFINE_GUID(IID_INoMarshal,0xecc8691b,0xc1db,0x4dc0,0x85,0x5e,0x65,0xf6,0xc5,0x51,0xaf,0x49);
40 MIDL_INTERFACE("ecc8691b-c1db-4dc0-855e-65f6c551af49")
41 INoMarshal : public IUnknown
42 {
43 public:
44 };
45 #endif // !__INoMarshal_INTERFACE_DEFINED__
46
47
48 class Assembly;
49 class Module;
50 class MethodTable;
51 struct ITypeLibExporterNotifySink;
52
53 typedef HRESULT (__stdcall* PCOMFN)(void);
54
55 //------------------------------------------------------------------------------------------
56 // HRESULT's returned by GetITypeInfoForEEClass.
57 #define S_USEIUNKNOWN   (HRESULT)2
58 #define S_USEIDISPATCH  (HRESULT)3
59
60 // For free-threaded marshaling, we must not be spoofed by out-of-process or cross-runtime marshal data.
61 // Only unmarshal data that comes from our own runtime.
62 extern BYTE         g_UnmarshalSecret[sizeof(GUID)];
63 extern bool         g_fInitedUnmarshalSecret;
64
65 struct ExportTypeLibFromLoadedAssembly_Args
66 {
67     Assembly*                   pAssembly;
68     LPCWSTR                     szTlb;
69     ITypeLib**                  ppTlb;
70     ITypeLibExporterNotifySink* pINotify;
71     int                         flags;
72     HRESULT                     hr;
73 };
74
75 // make sure to keep the following enum and the g_stdVtables array in sync
76 enum Enum_StdInterfaces
77 {
78     enum_InnerUnknown   = 0,
79     enum_IProvideClassInfo,
80     enum_IMarshal,
81     enum_ISupportsErrorInfo,
82     enum_IErrorInfo,
83     enum_IManagedObject,
84     enum_IConnectionPointContainer,
85     enum_IObjectSafety,
86     enum_IDispatchEx,
87     enum_IWeakReferenceSource,
88     enum_ICustomPropertyProvider,
89     enum_ICCW,
90     enum_IAgileObject,
91     enum_IStringable,
92     // add your favorite std interface here
93     enum_LastStdVtable,
94
95     enum_IUnknown = 0xff, // special enum for std unknown
96 };
97
98 // array of vtable pointers for std. interfaces such as IProvideClassInfo etc.
99 extern const SLOT * const g_rgStdVtables[];
100
101 template <size_t nVtableEntries>
102 struct StdInterfaceDesc
103 {
104     // This is a self-describing vtable pointer.
105     Enum_StdInterfaces          m_StdInterfaceKind;
106     UINT_PTR const * const      m_vtable[nVtableEntries];
107 };
108
109 typedef DPTR(StdInterfaceDesc<1>)   PTR_StdInterfaceDesc;
110 typedef VPTR(IUnknown)              PTR_IUnknown;
111
112 inline static Enum_StdInterfaces GetStdInterfaceKind(PTR_IUnknown pUnk)
113 {
114     LIMITED_METHOD_DAC_CONTRACT;
115
116     PTR_SLOT pVtable = dac_cast<PTR_SLOT>(*(dac_cast<PTR_TADDR>(pUnk)));
117     PTR_StdInterfaceDesc pDesc = dac_cast<PTR_StdInterfaceDesc>(dac_cast<PTR_BYTE>(pVtable) - offsetof(StdInterfaceDesc<1>, m_vtable));
118     
119 #ifndef DACCESS_COMPILE   
120     // Make sure the interface kind is the right one
121     // Only do this in non-DAC build as I don't want to bring in g_rgStdVtables global variable
122     _ASSERTE(g_rgStdVtables[pDesc->m_StdInterfaceKind] == pVtable);
123 #endif // !DACCESS_COMPILE
124
125     return pDesc->m_StdInterfaceKind;
126 }
127
128
129 // IUnknown is part of IDispatch
130 // Common vtables for well-known COM interfaces
131 // shared by all COM+ callable wrappers.
132 extern const StdInterfaceDesc<3>  g_InnerUnknown;         
133 extern const StdInterfaceDesc<4>  g_IProvideClassInfo;
134 extern const StdInterfaceDesc<9>  g_IMarshal;         
135 extern const StdInterfaceDesc<4>  g_ISupportsErrorInfo;
136 extern const StdInterfaceDesc<8>  g_IErrorInfo;       
137 extern const StdInterfaceDesc<5>  g_IManagedObject;   
138 extern const StdInterfaceDesc<5>  g_IConnectionPointContainer;
139 extern const StdInterfaceDesc<5>  g_IObjectSafety;
140 extern const StdInterfaceDesc<15> g_IDispatchEx;
141 extern const StdInterfaceDesc<4>  g_IWeakReferenceSource;
142 extern const StdInterfaceDesc<10> g_ICustomPropertyProvider;
143 extern const StdInterfaceDesc<7>  g_ICCW;
144 extern const StdInterfaceDesc<3>  g_IAgileObject;
145 extern const StdInterfaceDesc<7>  g_IStringable;
146
147 // enum class types
148 enum ComClassType
149 {
150     enum_UserDefined = 0,
151     enum_Collection,
152     enum_Exception,
153     enum_Event,
154     enum_Delegate,
155     enum_Control,
156     enum_Last,
157 };
158
159
160 //-------------------------------------------------------------------------
161 // IProvideClassInfo methods
162 HRESULT __stdcall ClassInfo_GetClassInfo_Wrapper(IUnknown* pUnk,
163                          ITypeInfo** ppTI); //Address of output variable that receives the type info.
164
165 // ---------------------------------------------------------------------------
166 //  Interface ISupportsErrorInfo
167
168 // %%Function: SupportsErroInfo_IntfSupportsErrorInfo,
169 // ---------------------------------------------------------------------------
170 HRESULT __stdcall
171 SupportsErroInfo_IntfSupportsErrorInfo_Wrapper(IUnknown* pUnk, REFIID riid);
172
173 // ---------------------------------------------------------------------------
174 //  Interface IErrorInfo
175
176 // %%Function: ErrorInfo_GetDescription,
177 HRESULT __stdcall ErrorInfo_GetDescription_Wrapper(IUnknown* pUnk, BSTR* pbstrDescription);
178
179 // %%Function: ErrorInfo_GetGUID,
180 HRESULT __stdcall ErrorInfo_GetGUID_Wrapper(IUnknown* pUnk, GUID* pguid);
181
182 // %%Function: ErrorInfo_GetHelpContext,
183 HRESULT _stdcall ErrorInfo_GetHelpContext_Wrapper(IUnknown* pUnk, DWORD* pdwHelpCtxt);
184
185 // %%Function: ErrorInfo_GetHelpFile,
186 HRESULT __stdcall ErrorInfo_GetHelpFile_Wrapper(IUnknown* pUnk, BSTR* pbstrHelpFile);
187
188 // %%Function: ErrorInfo_GetSource,
189 HRESULT __stdcall ErrorInfo_GetSource_Wrapper(IUnknown* pUnk, BSTR* pbstrSource);
190
191 //------------------------------------------------------------------------------------------
192 //      IDispatch methods for COM+ objects. These methods dispatch to the appropriate
193 //      implementation based on the flags of the class that implements them.
194
195
196 // %%Function: IDispatch::GetTypeInfoCount
197 HRESULT __stdcall   Dispatch_GetTypeInfoCount_Wrapper (
198                                      IDispatch* pDisp,
199                                      unsigned int *pctinfo);
200
201
202 //  %%Function: IDispatch::GetTypeInfo
203 HRESULT __stdcall   Dispatch_GetTypeInfo_Wrapper (
204                                     IDispatch* pDisp,
205                                     unsigned int itinfo,
206                                     LCID lcid,
207                                     ITypeInfo **pptinfo);
208
209 //  %%Function: IDispatch::GetIDsofNames
210 HRESULT __stdcall   Dispatch_GetIDsOfNames_Wrapper (
211                                     IDispatch* pDisp,
212                                     REFIID riid,
213                                     __in_ecount(cNames) OLECHAR **rgszNames,
214                                     unsigned int cNames,
215                                     LCID lcid,
216                                     DISPID *rgdispid);
217
218 //  %%Function: IDispatch::Invoke
219 HRESULT __stdcall   Dispatch_Invoke_Wrapper (
220                                     IDispatch* pDisp,
221                                     DISPID dispidMember,
222                                     REFIID riid,
223                                     LCID lcid,
224                                     unsigned short wFlags,
225                                     DISPPARAMS *pdispparams,
226                                     VARIANT *pvarResult,
227                                     EXCEPINFO *pexcepinfo,
228                                     unsigned int *puArgErr
229                                     );
230
231 //  %%Function: IDispatch::GetIDsofNames
232 HRESULT __stdcall   InternalDispatchImpl_GetIDsOfNames_Wrapper (
233                                     IDispatch* pDisp,
234                                     REFIID riid,
235                                     __in_ecount(cNames) OLECHAR **rgszNames,
236                                     unsigned int cNames,
237                                     LCID lcid,
238                                     DISPID *rgdispid);
239
240 //  %%Function: IDispatch::Invoke
241 HRESULT __stdcall   InternalDispatchImpl_Invoke_Wrapper (
242                                     IDispatch* pDisp,
243                                     DISPID dispidMember,
244                                     REFIID riid,
245                                     LCID lcid,
246                                     unsigned short wFlags,
247                                     DISPPARAMS *pdispparams,
248                                     VARIANT *pvarResult,
249                                     EXCEPINFO *pexcepinfo,
250                                     unsigned int *puArgErr
251                                     );
252
253 //------------------------------------------------------------------------------------------
254 //      IDispatchEx methods for COM+ objects
255
256
257 // %%Function: IDispatchEx::GetTypeInfoCount
258 HRESULT __stdcall   DispatchEx_GetTypeInfoCount_Wrapper (
259                                     IDispatchEx* pDisp,
260                                     unsigned int *pctinfo);
261
262
263 //  %%Function: IDispatch::GetTypeInfo
264 HRESULT __stdcall   DispatchEx_GetTypeInfo_Wrapper (
265                                     IDispatchEx* pDisp,
266                                     unsigned int itinfo,
267                                     LCID lcid,
268                                     ITypeInfo **pptinfo);
269
270 // IDispatchEx::GetIDsofNames
271 HRESULT __stdcall   DispatchEx_GetIDsOfNames_Wrapper (
272                                     IDispatchEx* pDisp,
273                                     REFIID riid,
274                                     __in_ecount(cNames) OLECHAR **rgszNames,
275                                     unsigned int cNames,
276                                     LCID lcid,
277                                     DISPID *rgdispid);
278
279 // IDispatchEx::Invoke
280 HRESULT __stdcall   DispatchEx_Invoke_Wrapper (
281                                     IDispatchEx* pDisp,
282                                     DISPID dispidMember,
283                                     REFIID riid,
284                                     LCID lcid,
285                                     unsigned short wFlags,
286                                     DISPPARAMS *pdispparams,
287                                     VARIANT *pvarResult,
288                                     EXCEPINFO *pexcepinfo,
289                                     unsigned int *puArgErr);
290
291 // IDispatchEx::DeleteMemberByDispID
292 HRESULT __stdcall   DispatchEx_DeleteMemberByDispID_Wrapper (
293                                     IDispatchEx* pDisp,
294                                     DISPID id);
295
296 // IDispatchEx::DeleteMemberByName
297 HRESULT __stdcall   DispatchEx_DeleteMemberByName_Wrapper (
298                                     IDispatchEx* pDisp,
299                                     BSTR bstrName,
300                                     DWORD grfdex);
301
302
303 // IDispatchEx::GetDispID
304 HRESULT __stdcall   DispatchEx_GetDispID_Wrapper (
305                                     IDispatchEx* pDisp,
306                                     BSTR bstrName,
307                                     DWORD grfdex,
308                                     DISPID *pid);
309
310
311 // IDispatchEx::GetMemberName
312 HRESULT __stdcall   DispatchEx_GetMemberName_Wrapper (
313                                     IDispatchEx* pDisp,
314                                     DISPID id,
315                                     BSTR *pbstrName);
316
317 // IDispatchEx::GetMemberProperties
318 HRESULT __stdcall   DispatchEx_GetMemberProperties_Wrapper (
319                                     IDispatchEx* pDisp,
320                                     DISPID id,
321                                     DWORD grfdexFetch,
322                                     DWORD *pgrfdex);
323
324 // IDispatchEx::GetNameSpaceParent
325 HRESULT __stdcall   DispatchEx_GetNameSpaceParent_Wrapper (
326                                     IDispatchEx* pDisp,
327                                     IUnknown **ppunk);
328
329 // IDispatchEx::GetNextDispID
330 HRESULT __stdcall   DispatchEx_GetNextDispID_Wrapper (
331                                     IDispatchEx* pDisp,
332                                     DWORD grfdex,
333                                     DISPID id,
334                                     DISPID *pid);
335
336 // IDispatchEx::InvokeEx
337 HRESULT __stdcall   DispatchEx_InvokeEx_Wrapper (
338                                     IDispatchEx* pDisp,
339                                     DISPID id,
340                                     LCID lcid,
341                                     WORD wFlags,
342                                     DISPPARAMS *pdp,
343                                     VARIANT *pVarRes,
344                                     EXCEPINFO *pei,
345                                     IServiceProvider *pspCaller);
346
347 //------------------------------------------------------------------------------------------
348 //      IInspectable methods for managed objects
349
350 // IInspectable::GetIIDs
351 HRESULT __stdcall Inspectable_GetIIDs_Wrapper (
352                                     IInspectable *pInsp,
353                                     ULONG *iidCount,
354                                     IID **iids);
355
356 // IInspectable::GetRuntimeClassName
357 HRESULT __stdcall Inspectable_GetRuntimeClassName_Wrapper (
358                                     IInspectable *pInsp,
359                                     HSTRING *className);
360
361 // IInspectable::GetTrustLevel
362 HRESULT __stdcall Inspectable_GetTrustLevel_Wrapper (
363                                     IInspectable *pInsp,
364                                     TrustLevel *trustLevel);
365
366 //------------------------------------------------------------------------------------------
367 //      IWeakReferenceSource methods for managed objects
368
369 HRESULT __stdcall WeakReferenceSource_GetWeakReference_Wrapper (
370                                     IWeakReferenceSource *pRefSrc,
371                                     IWeakReference **weakReference);
372
373 //------------------------------------------------------------------------------------------
374 //      IMarshal methods for COM+ objects
375
376 HRESULT __stdcall Marshal_GetUnmarshalClass_Wrapper (
377                                     IMarshal* pMarsh,
378                                     REFIID riid, void * pv, ULONG dwDestContext,
379                                     void * pvDestContext, ULONG mshlflags,
380                                     LPCLSID pclsid);
381
382 HRESULT __stdcall Marshal_GetMarshalSizeMax_Wrapper (
383                                     IMarshal* pMarsh,
384                                     REFIID riid, void * pv, ULONG dwDestContext,
385                                     void * pvDestContext, ULONG mshlflags,
386                                     ULONG * pSize);
387
388 HRESULT __stdcall Marshal_MarshalInterface_Wrapper (
389                                     IMarshal* pMarsh,
390                                     LPSTREAM pStm, REFIID riid, void * pv,
391                                     ULONG dwDestContext, LPVOID pvDestContext,
392                                     ULONG mshlflags);
393
394 HRESULT __stdcall Marshal_UnmarshalInterface_Wrapper (
395                                     IMarshal* pMarsh,
396                                     LPSTREAM pStm, REFIID riid,
397                                     void ** ppvObj);
398
399 HRESULT __stdcall Marshal_ReleaseMarshalData_Wrapper (IMarshal* pMarsh, LPSTREAM pStm);
400
401 HRESULT __stdcall Marshal_DisconnectObject_Wrapper (IMarshal* pMarsh, ULONG dwReserved);
402
403
404 //------------------------------------------------------------------------------------------
405 //      IManagedObject methods for COM+ objects
406
407 interface IManagedObject;
408
409 HRESULT __stdcall ManagedObject_GetObjectIdentity_Wrapper(IManagedObject *pManaged,
410                                     BSTR* pBSTRGUID, DWORD* pAppDomainID,
411                                     void** pCCW);
412
413
414 HRESULT __stdcall ManagedObject_GetSerializedBuffer_Wrapper(IManagedObject *pManaged,
415                                     BSTR* pBStr);
416
417
418 //------------------------------------------------------------------------------------------
419 //      IConnectionPointContainer methods for COM+ objects
420
421 interface IEnumConnectionPoints;
422
423 HRESULT __stdcall ConnectionPointContainer_EnumConnectionPoints_Wrapper(IUnknown* pUnk,
424                                     IEnumConnectionPoints **ppEnum);
425
426 HRESULT __stdcall ConnectionPointContainer_FindConnectionPoint_Wrapper(IUnknown* pUnk,
427                                     REFIID riid,
428                                     IConnectionPoint **ppCP);
429
430
431 //------------------------------------------------------------------------------------------
432 //      IObjectSafety methods for COM+ objects
433
434 interface IObjectSafety;
435
436 HRESULT __stdcall ObjectSafety_GetInterfaceSafetyOptions_Wrapper(IUnknown* pUnk,
437                                                          REFIID riid,
438                                                          DWORD *pdwSupportedOptions,
439                                                          DWORD *pdwEnabledOptions);
440
441 HRESULT __stdcall ObjectSafety_SetInterfaceSafetyOptions_Wrapper(IUnknown* pUnk,
442                                                          REFIID riid,
443                                                          DWORD dwOptionSetMask,
444                                                          DWORD dwEnabledOptions);
445
446
447 //------------------------------------------------------------------------------------------
448 //      ICustomPropertyProvider methods for Jupiter
449 HRESULT __stdcall ICustomPropertyProvider_GetProperty_Wrapper(IUnknown *pPropertyProvider, 
450                                                               HSTRING hstrName, 
451                                                               /* [out] */ IUnknown **ppProperty);
452
453 // Windows.UI.DirectUI.Xaml.TypeNameNative
454 struct TypeNameNative
455 {
456     HSTRING     typeName;
457     int         typeKind;
458 };
459
460 HRESULT __stdcall ICustomPropertyProvider_GetIndexedProperty_Wrapper(IUnknown *pPropertyProvider, 
461                                                                      HSTRING hstrName, 
462                                                                      TypeNameNative indexedParamType,
463                                                                      /* [out, retval] */ IUnknown **ppProperty);
464
465 HRESULT __stdcall ICustomPropertyProvider_GetStringRepresentation_Wrapper(IUnknown *pPropertyProvider, 
466                                                                           /* [out, retval] */ HSTRING *phstrStringRepresentation);
467
468 HRESULT __stdcall ICustomPropertyProvider_GetType_Wrapper(IUnknown *pPropertyProvider, 
469                                                           /* [out, retval] */ TypeNameNative *pTypeIdentifier);
470
471 HRESULT __stdcall IStringable_ToString_Wrapper(IUnknown* pStringable,
472                                                /* [out, retval] */ HSTRING* result);
473
474 //------------------------------------------------------------------------------------------
475 //      ICCW methods for Jupiter
476 ULONG __stdcall ICCW_AddRefFromJupiter_Wrapper(IUnknown *pUnk);
477
478 ULONG __stdcall ICCW_ReleaseFromJupiter_Wrapper(IUnknown *pUnk);
479
480 HRESULT __stdcall ICCW_Peg_Wrapper(IUnknown *pUnk);
481
482 HRESULT __stdcall ICCW_Unpeg_Wrapper(IUnknown *pUnk);
483
484
485
486 #ifdef MDA_SUPPORTED
487 VOID __stdcall DirtyCast_Assert(IUnknown* pUnk);
488 #endif
489
490 // IUNKNOWN wrappers
491
492 // prototypes IUnknown methods
493 HRESULT __stdcall   Unknown_QueryInterface(IUnknown* pUnk, REFIID riid, void** ppv);
494 HRESULT __stdcall   Unknown_QueryInterface_ICCW(IUnknown *pUnk, REFIID riid, void **ppv);
495
496 ULONG __stdcall     Unknown_AddRef(IUnknown* pUnk);
497 ULONG __stdcall     Unknown_Release(IUnknown* pUnk);
498 ULONG __stdcall     Unknown_AddRefInner(IUnknown* pUnk);
499 ULONG __stdcall     Unknown_ReleaseInner(IUnknown* pUnk);
500
501 // for std interfaces such as IProvideClassInfo
502 HRESULT __stdcall   Unknown_QueryInterface_IErrorInfo(IUnknown* pUnk, REFIID riid, void** ppv);
503 ULONG __stdcall     Unknown_AddRefSpecial(IUnknown* pUnk);
504 ULONG __stdcall     Unknown_ReleaseSpecial(IUnknown* pUnk);
505 ULONG __stdcall     Unknown_ReleaseSpecial_IErrorInfo(IUnknown* pUnk);
506
507
508 // special idispatch methods
509
510 HRESULT __stdcall
511 InternalDispatchImpl_GetIDsOfNames (
512     IDispatch* pDisp,
513     REFIID riid,
514     __in_ecount(cNames) OLECHAR **rgszNames,
515     unsigned int cNames,
516     LCID lcid,
517     DISPID *rgdispid);
518
519
520 HRESULT __stdcall
521 InternalDispatchImpl_Invoke (
522     IDispatch* pDisp,
523     DISPID dispidMember,
524     REFIID riid,
525     LCID lcid,
526     unsigned short wFlags,
527     DISPPARAMS *pdispparams,
528     VARIANT *pvarResult,
529     EXCEPINFO *pexcepinfo,
530     unsigned int *puArgErr);
531
532 //------------------------------------------------------------------------------------------
533 // Helper to get the current IErrorInfo if the specified interface supports it.
534 IErrorInfo *GetSupportedErrorInfo(IUnknown *iface, REFIID riid, BOOL checkForIRestrictedErrInfo = TRUE);
535
536 //------------------------------------------------------------------------------------------
537 // Helper functions that return HRESULT's instead of throwing exceptions.
538 HRESULT TryGetGuid(MethodTable* pClass, GUID* pGUID, BOOL b);
539
540 //------------------------------------------------------------------------------------------
541 // Helpers to get the ITypeInfo* for a type.
542 HRESULT ExportTypeLibFromLoadedAssemblyNoThrow(Assembly *pAssembly, LPCWSTR szTlb, ITypeLib **ppTlb, ITypeLibExporterNotifySink *pINotify, int flags);
543 void    ExportTypeLibFromLoadedAssembly(Assembly *pAssembly, LPCWSTR szTlb, ITypeLib **ppTlb, ITypeLibExporterNotifySink *pINotify, int flags);
544 HRESULT GetITypeLibForEEClass(MethodTable *pMT, ITypeLib **ppTLB, int bAutoCreate, int flags);
545 HRESULT GetITypeInfoForEEClass(MethodTable *pMT, ITypeInfo **ppTI, int bClassInfo=false, int bAutoCreate=true, int flags=0);
546 HRESULT GetTypeLibIdForRegisteredEEClass(MethodTable *pMT, GUID *pGuid);
547 HRESULT GetDefaultInterfaceForCoclass(ITypeInfo *pTI, ITypeInfo **ppTIDef);
548
549 //-------------------------------------------------------------------------------------
550 // Helper to get the ITypeLib* for a Assembly.
551 HRESULT GetITypeLibForAssembly(Assembly *pAssembly, ITypeLib **ppTLB, int bAutoCreate, int flags);
552
553 //-------------------------------------------------------------------------------------
554 // Helper to get the GUID of the typelib that is created from an assembly.
555 HRESULT GetTypeLibGuidForAssembly(Assembly *pAssembly, GUID *pGuid);
556
557 //-------------------------------------------------------------------------------------
558 // Helper for IInspectable's GetRuntimeClassName on an IReference<T> or IReferenceArray<T>.
559 void GetRuntimeClassNameForIReferenceOrIReferenceArray(MethodTable* pInstantiatedType, BOOL fIsIReferenceArray, SString& className);
560
561 #endif