| 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 | |
| 6 | //////////////////////////////////////////////////////////////////////////////// |
| 7 | |
| 8 | |
| 9 | |
| 10 | |
| 11 | #ifndef _MANAGEDMDIMPORT_H_ |
| 12 | #define _MANAGEDMDIMPORT_H_ |
| 13 | |
| 14 | #include "corhdr.h" |
| 15 | #include "fcall.h" |
| 16 | #include "runtimehandles.h" |
| 17 | |
| 18 | // |
| 19 | // Keep the struct definitions in sync with bcl\system\reflection\mdimport.cs |
| 20 | // |
| 21 | |
| 22 | typedef struct |
| 23 | { |
| 24 | INT32 m_count; |
| 25 | void* m_array; |
| 26 | } ConstArray; |
| 27 | |
| 28 | typedef struct |
| 29 | { |
| 30 | I4Array * largeResult; |
| 31 | int length; |
| 32 | #ifdef _WIN64 |
| 33 | int padding; |
| 34 | #endif |
| 35 | int smallResult[16]; |
| 36 | } MetadataEnumResult; |
| 37 | |
| 38 | #define MDDecl0(RET, NAME) static FCDECL1(RET, NAME, IMDInternalImport* pScope) |
| 39 | #define MDDecl1(RET, NAME, arg0) static FCDECL2(RET, NAME, IMDInternalImport* pScope, arg0) |
| 40 | #define MDDecl2(RET, NAME, arg0, arg1) static FCDECL3(RET, NAME, IMDInternalImport* pScope, arg0, arg1) |
| 41 | #define MDDecl3(RET, NAME, arg0, arg1, arg2) static FCDECL4(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2) |
| 42 | #define MDDecl4(RET, NAME, arg0, arg1, arg2, arg3) static FCDECL5(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3) |
| 43 | #define MDDecl5(RET, NAME, arg0, arg1, arg2, arg3, arg4) static FCDECL6(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4) |
| 44 | #define MDDecl6(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5) static FCDECL7(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5) |
| 45 | #define MDDecl7(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6) static FCDECL8(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6) |
| 46 | #define MDDecl8(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) static FCDECL9(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) |
| 47 | #define MDDecl9(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) static FCDECL10(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) |
| 48 | #define MDDecl10(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) static FCDECL11(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) |
| 49 | |
| 50 | #define MDImpl0(RET, NAME) FCIMPL1(RET, NAME, IMDInternalImport* pScope) |
| 51 | #define MDImpl1(RET, NAME, arg0) FCIMPL2(RET, NAME, IMDInternalImport* pScope, arg0) |
| 52 | #define MDImpl2(RET, NAME, arg0, arg1) FCIMPL3(RET, NAME, IMDInternalImport* pScope, arg0, arg1) |
| 53 | #define MDImpl3(RET, NAME, arg0, arg1, arg2) FCIMPL4(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2) |
| 54 | #define MDImpl4(RET, NAME, arg0, arg1, arg2, arg3) FCIMPL5(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3) |
| 55 | #define MDImpl5(RET, NAME, arg0, arg1, arg2, arg3, arg4) FCIMPL6(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4) |
| 56 | #define MDImpl6(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5) FCIMPL7(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5) |
| 57 | #define MDImpl7(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6) FCIMPL8(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6) |
| 58 | #define MDImpl8(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) FCIMPL9(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) |
| 59 | #define MDImpl9(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) FCIMPL10(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8) |
| 60 | #define MDImpl10(RET, NAME, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) FCIMPL11(RET, NAME, IMDInternalImport* pScope, arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9) |
| 61 | |
| 62 | class MetaDataImport |
| 63 | { |
| 64 | public: |
| 65 | // |
| 66 | // GetXXXProps |
| 67 | // |
| 68 | MDDecl1(void, GetScopeProps, GUID* pmvid); |
| 69 | MDDecl4(void, GetTypeDefProps, mdTypeDef td, STRINGREF* pszTypeDef, DWORD* pdwTypeDefFlags, mdToken* ptkExtends); |
| 70 | MDDecl2(void, GetMemberRefProps, mdMemberRef mr, ConstArray* ppvSigBlob); |
| 71 | |
| 72 | |
| 73 | //// |
| 74 | //// EnumXXX |
| 75 | //// |
| 76 | MDDecl3(void, Enum, mdToken type, mdToken tkParent, MetadataEnumResult * pResult); |
| 77 | MDDecl3(void, GetCustomAttributeProps, mdCustomAttribute cv, mdToken* ptkType, ConstArray* ppBlob); |
| 78 | |
| 79 | //// |
| 80 | //// Misc |
| 81 | //// |
| 82 | |
| 83 | MDDecl4(Object *, GetDefaultValue, mdToken tk, INT64* pDefaultValue, INT32* pLength, INT32* pCorElementType); |
| 84 | MDDecl2(void, GetName, mdToken tk, LPCSTR* pszName); |
| 85 | MDDecl3(void, GetUserString, mdToken tk, LPCSTR* pszName, ULONG* pCount); |
| 86 | MDDecl2(void, GetNamespace, mdToken tk, LPCSTR* pszName); |
| 87 | MDDecl2(void, GetParentToken, mdToken tk, mdToken* ptk); |
| 88 | MDDecl3(void, GetParamDefProps, mdToken tk, INT32* pSequence, INT32* pAttributes); |
| 89 | MDDecl4(void, GetPinvokeMap, mdToken tk, DWORD* pMappingFlags, LPCSTR* pszImportName, LPCSTR* pszImportDll); |
| 90 | |
| 91 | MDDecl3(void, GetClassLayout, mdTypeDef td, DWORD* pdwPackSize, ULONG* pulClassSize); |
| 92 | MDDecl3(FC_BOOL_RET, GetFieldOffset, mdTypeDef td, mdFieldDef target, DWORD* pdwFieldOffset); |
| 93 | |
| 94 | MDDecl3(void, GetEventProps, mdToken tk, LPCSTR* pszName, INT32 *pdwEventFlags); |
| 95 | MDDecl2(void, GetGenericParamProps, mdToken tk, DWORD* pAttributes); |
| 96 | MDDecl2(void, GetFieldDefProps, mdToken tk, INT32 *pdwFieldFlags); |
| 97 | MDDecl4(void, GetPropertyProps, mdToken tk, LPCSTR* pszName, INT32 *pdwPropertyFlags, ConstArray* ppvSigBlob); |
| 98 | |
| 99 | MDDecl2(void, GetSignatureFromToken, mdToken tk, ConstArray* pSig); |
| 100 | MDDecl2(void, GetSigOfFieldDef, mdToken tk, ConstArray* pMarshalInfo); |
| 101 | MDDecl2(void, GetSigOfMethodDef, mdToken tk, ConstArray* pMarshalInfo); |
| 102 | MDDecl2(void, GetFieldMarshal, mdToken tk, ConstArray* pMarshalInfo); |
| 103 | MDDecl2(mdParamDef, GetParamForMethodIndex, mdMethodDef md, ULONG ulParamSeq); |
| 104 | MDDecl1(FC_BOOL_RET, IsValidToken, mdToken tk); |
| 105 | MDDecl1(mdTypeDef, GetNestedClassProps, mdTypeDef tdNestedClass); |
| 106 | MDDecl1(ULONG, GetNativeCallConvFromSig, ConstArray sig); |
| 107 | |
| 108 | static FCDECL11(void, GetMarshalAs, |
| 109 | BYTE* pvNativeType, |
| 110 | ULONG cbNativeType, |
| 111 | INT32* unmanagedType, |
| 112 | INT32* safeArraySubType, |
| 113 | STRINGREF* safeArrayUserDefinedSubType, |
| 114 | INT32* arraySubType, |
| 115 | INT32* sizeParamIndex, |
| 116 | INT32* sizeConst, |
| 117 | STRINGREF* marshalType, |
| 118 | STRINGREF* marshalCookie, |
| 119 | INT32* iidParamIndex); |
| 120 | }; |
| 121 | |
| 122 | #endif |
| 123 | |