blob: d1b360255313bf20ba5f9f2b3b58834ea29bcb2c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
//
// File: ComInterfaceMarshaler.h
//
//
#ifndef _H_COMInterfaceMarshaler_
#define _H_COMInterfaceMarshaler_
#ifndef FEATURE_COMINTEROP
#error FEATURE_COMINTEROP is required for this file
#endif // FEATURE_COMINTEROP
//--------------------------------------------------------------------------------
// class ComInterfaceMarshaler
//--------------------------------------------------------------------------------
class COMInterfaceMarshaler
{
public:
COMInterfaceMarshaler();
virtual ~COMInterfaceMarshaler();
VOID Init(IUnknown* pUnk, MethodTable* pClassMT, Thread *pThread, DWORD flags = 0); // see RCW::CreationFlags
OBJECTREF FindOrCreateObjectRef(IUnknown **ppIncomingIP, MethodTable *pIncomingItfMT = NULL);
OBJECTREF FindOrCreateObjectRef(IUnknown *pIncomingIP, MethodTable *pIncomingItfMT = NULL);
VOID InitializeExistingComObject(OBJECTREF *pComObj, IUnknown **ppIncomingIP);
private:
VOID InitializeObjectClass(IUnknown *pIncomingIP);
OBJECTREF FindOrCreateObjectRefInternal(IUnknown **ppIncomingIP, MethodTable *pIncomingItfMT, bool bIncomingIPAddRefed);
VOID CreateObjectRef(BOOL fDuplicate, OBJECTREF *pComObj, IUnknown **ppIncomingIP, MethodTable *pIncomingItfMT, bool bIncomingIPAddRefed);
static VOID EnsureCOMInterfacesSupported(OBJECTREF oref, MethodTable* pClassMT);
inline bool NeedUniqueObject();
RCWCache* m_pWrapperCache; // initialization info
IUnknown* m_pUnknown; // NOT AddRef'ed
IUnknown* m_pIdentity; // NOT AddRef'ed
TypeHandle m_typeHandle; // inited and computed if inited value is NULL. Need to represent all array information too.
TypeHandle m_itfTypeHandle; // an interface supported by the object as returned from GetRuntimeClassName
Thread* m_pThread; // Current thread - avoid calling GetThread multiple times
DWORD m_flags;
};
#endif // #ifndef _H_COMInterfaceMarshaler_
|