Exemplo n.º 1
0
        public unsafe void GetMemberRefProps(uint mr, out string szMemberRef, out uint ptk, out byte[] sigBlob)
        {
            uint  pchName, maxcbName = 50, lenSigBlob;
            byte *ptrBlob;

            byte[] buffer = new byte[2 * (maxcbName + 1)];

            importer.GetMemberRefProps(mr, out ptk, buffer, maxcbName, out pchName, out ptrBlob, out lenSigBlob);
            if (pchName > maxcbName)
            {
                buffer = new byte[2 * (pchName + 1)];
                importer.GetMemberRefProps(mr, out ptk, buffer, pchName, out pchName, out ptrBlob, out lenSigBlob);
            }
            szMemberRef = UnicodeEncoding.Unicode.GetString(buffer).Substring(0, (int)pchName - 1);
            sigBlob     = pointerToArray(ptrBlob, lenSigBlob);
        }
Exemplo n.º 2
0
        public MemberRefProps GetMemberRefProps(uint token)
        {
            MemberRefProps ret     = new MemberRefProps();
            IntPtr         sigPtr  = IntPtr.Zero;
            uint           sigSize = 0;

            ret.Token = token;
            ret.Name  = Util.GetString(delegate(uint pStringLenght, out uint stringLenght, System.IntPtr pString) {
                metaData.GetMemberRefProps(
                    token,
                    out ret.DeclaringType,
                    pString, pStringLenght, out stringLenght,
                    out sigPtr,
                    out sigSize
                    );
            });
            ret.SigBlob = new Blob(sigPtr, sigSize);
            return(ret);
        }
Exemplo n.º 3
0
		public unsafe static byte[] GetMemberRefSignatureBlob(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return null;
			IntPtr pvSigBlob;
			uint cbSig;
			int hr = mdi.GetMemberRefProps(token, IntPtr.Zero, IntPtr.Zero, 0, IntPtr.Zero, new IntPtr(&pvSigBlob), new IntPtr(&cbSig));
			if (hr != 0 || pvSigBlob == IntPtr.Zero)
				return null;

			var sig = new byte[cbSig];
			Marshal.Copy(pvSigBlob, sig, 0, sig.Length);
			return sig;
		}
Exemplo n.º 4
0
		public unsafe static uint GetMemberRefClassToken(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return 0;
			uint tk;
			int hr = mdi.GetMemberRefProps(token, new IntPtr(&tk), IntPtr.Zero, 0, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero);
			return hr != 0 ? 0 : tk;
		}
Exemplo n.º 5
0
		public unsafe static string GetMemberRefName(IMetaDataImport mdi, uint token) {
			if (mdi == null)
				return null;
			char[] nameBuf = null;
			uint chMember;
			int hr = mdi.GetMemberRefProps(token, IntPtr.Zero, IntPtr.Zero, 0, new IntPtr(&chMember), IntPtr.Zero, IntPtr.Zero);
			if (hr >= 0 && chMember != 0) {
				nameBuf = new char[chMember];
				fixed (char* p = &nameBuf[0])
					hr = mdi.GetMemberRefProps(token, IntPtr.Zero, new IntPtr(p), (uint)nameBuf.Length, new IntPtr(&chMember), IntPtr.Zero, IntPtr.Zero);
			}
			if (hr < 0)
				return null;

			return chMember <= 1 ? string.Empty : new string(nameBuf, 0, (int)chMember - 1);
		}