示例#1
0
        private AssemblyName ConstructAssemblyName(IntPtr asmMetaPtr, char[] asmNameBuf, uint asmNameLength, IntPtr pubKeyPtr, uint pubKeyBytes, uint flags)
        {
            ASSEMBLYMETADATA structure    = (ASSEMBLYMETADATA)Marshal.PtrToStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA));
            AssemblyName     assemblyName = new AssemblyName();

            assemblyName.Name    = new string(asmNameBuf, 0, (int)asmNameLength - 1);
            assemblyName.Version = new Version((int)structure.usMajorVersion, (int)structure.usMinorVersion, (int)structure.usBuildNumber, (int)structure.usRevisionNumber);
            string stringUni = Marshal.PtrToStringUni(structure.rpLocale);

            assemblyName.CultureInfo = new CultureInfo(stringUni);
            if (pubKeyBytes > 0U)
            {
                byte[] numArray = new byte[(int)pubKeyBytes];
                Marshal.Copy(pubKeyPtr, numArray, 0, (int)pubKeyBytes);
                if (((int)flags & 1) != 0)
                {
                    assemblyName.SetPublicKey(numArray);
                }
                else
                {
                    assemblyName.SetPublicKeyToken(numArray);
                }
            }
            return(assemblyName);
        }
示例#2
0
 private void FreeAsmMeta(IntPtr asmMetaPtr)
 {
     if (asmMetaPtr != IntPtr.Zero)
     {
         ASSEMBLYMETADATA assemblymetadata = (ASSEMBLYMETADATA)Marshal.PtrToStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA));
         Marshal.FreeCoTaskMem(assemblymetadata.rpLocale);
         Marshal.DestroyStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA));
         Marshal.FreeCoTaskMem(asmMetaPtr);
     }
 }
示例#3
0
        private AssemblyName ConstructAssemblyName(IntPtr asmMetaPtr, char[] asmNameBuf, uint asmNameLength, IntPtr pubKeyPtr, uint pubKeyBytes, uint flags)
        {
            ASSEMBLYMETADATA assemblymetadata = (ASSEMBLYMETADATA)Marshal.PtrToStructure(asmMetaPtr, typeof(ASSEMBLYMETADATA));
            AssemblyName     name             = new AssemblyName {
                Name    = new string(asmNameBuf, 0, ((int)asmNameLength) - 1),
                Version = new Version(assemblymetadata.usMajorVersion, assemblymetadata.usMinorVersion, assemblymetadata.usBuildNumber, assemblymetadata.usRevisionNumber)
            };
            string str = Marshal.PtrToStringUni(assemblymetadata.rpLocale);

            name.CultureInfo = new CultureInfo(str);
            if (pubKeyBytes > 0)
            {
                byte[] destination = new byte[pubKeyBytes];
                Marshal.Copy(pubKeyPtr, destination, 0, (int)pubKeyBytes);
                if ((flags & 1) != 0)
                {
                    name.SetPublicKey(destination);
                    return(name);
                }
                name.SetPublicKeyToken(destination);
            }
            return(name);
        }