// // This code is the managed pdb reader interface for PERWAPI. // Written by John Gough, April 2007. // Copyright(c) 2007-2008 John Gough, and Queensland University of Technology // using System; using System.Collections.Generic; using System.Text; using System.Runtime.InteropServices; using System.Runtime.InteropServices.ComTypes; using System.Diagnostics.SymbolStore; namespace QUT.Symbols { #region Utility Classes /// /// PInvoke hook to call COM CoCreateInstance. /// Plus any useful constants... /// internal static class OLE32 { internal const int hr_E_FAIL = unchecked((int)0x80004005); [DllImport("ole32.dll")] internal static extern int CoCreateInstance( [In] ref Guid rclsid, [In, MarshalAs(UnmanagedType.IUnknown)] object pUnkOuter, [In] uint dwClsContext, [In] ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppv); } /// /// Some external guids, defined in cor.h, mainly /// internal static class XGuid { // This guid is the CLSID of the metadata dispenser object in mscoree.dll internal static Guid dispenserClassID = new Guid("{E5CB7A31-7512-11d2-89CE-0080C792E5D8}"); // This guid is the IID of the IMetaDataDispenser interface defined in cor.h internal static Guid dispenserIID = new Guid("{809c652e-7396-11d2-9771-00a0c9b4d50c}"); // This guid is the IID of the IMetaDataImport interface in cor.h internal static Guid importerIID = new Guid("{7DAC8207-D3AE-4c75-9B67-92801A497D44}"); // This guid is the UUID for CorSymBinder_SxS, defined in corsym.h internal static Guid binderCLSID = new Guid("{0A29FF9E-7F9C-4437-8B11-F424491E3931}"); internal static Guid binderIID = new Guid("{28AD3D43-B601-4d26-8A1B-25F9165AF9D7}"); // This guid is the CLSID for CLSID_CorSymWriter_SxS, defined in corsym.h internal static Guid symWriterClassID = new Guid("0AE2DEB0-F901-478b-BB9F-881EE8066788"); internal static Guid symWriterIID = new Guid("0B97726E-9E6D-4f05-9A26-424022093CAA"); } [StructLayout(LayoutKind.Sequential)] public struct ImageDebugDirectory { private int Characteristics; private int TimeDateStamp; private short MajorVersion; private short MinorVersion; private int Type; private int SizeOfData; private int AddressOfRawData; private int PointerToRawData; // public override string ToString(); } /// /// Some static helper methods /// internal static class Util { internal static void ComCheck(bool test, string message) { if (!test) throw new COMException(message); } internal static void ComCheckHR(int hr, string message) { if (hr == OLE32.hr_E_FAIL) throw new COMException(message); } internal static void ArgCheck(bool test, string message) { if (!test) throw new ArgumentException(message); } } #endregion // Utility Classes }