Ejemplo n.º 1
0
        public SymbolWriter(string binaryFile, string pdbFile)
        {
            Contract.Requires(binaryFile != null);
            Contract.Requires(pdbFile != null);
            IntPtr importer = IntPtr.Zero;

            try {
                object dispenser;
                OLE32.CoCreateInstance(ref XGuid.dispenserClassID, null, 1, ref XGuid.dispenserIID, out dispenser);
                object pUnknown;
                ((IMetaDataDispenserSubset)dispenser).OpenScope(binaryFile, 0, ref XGuid.importerIID, out pUnknown);
                importer = Marshal.GetComInterfaceForObject(pUnknown, typeof(IMetadataImport));

                object writer2;
                OLE32.CoCreateInstance(ref XGuid.symWriterClassID, null, 1, ref XGuid.symWriterIID, out writer2);
                writer = (ISymUnmanagedWriter2)writer2;
                writer.Initialize(importer, pdbFile, null, true);
            }
            catch (Exception x) {
                Console.WriteLine(x.Message);
            }
            finally {
                if (importer != IntPtr.Zero)
                {
                    Marshal.Release(importer);
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Constructor for SymbolReader.
        /// Just creates a reference to the unmanaged reader
        /// from the COM world.  This Reader only implements
        /// the method(s) required by PERWAPI.
        /// </summary>
        /// <param name="filename"></param>
        public SymbolReader(string filename)
        {
            Contract.Requires(filename != null);
            IntPtr importer = IntPtr.Zero;

            try {
                object ppb;
                OLE32.CoCreateInstance(ref XGuid.dispenserClassID, null, 1, ref XGuid.dispenserIID, out ppb);
                object pBnd;
                OLE32.CoCreateInstance(ref XGuid.binderCLSID, null, 1, ref XGuid.binderIID, out pBnd);

                // Get the metadata dispenser from mscoree.dll
                Util.ComCheck(ppb != null, "Failed to create metadata dispenser");

                object pUnk;
                ((IMetaDataDispenserSubset)ppb).OpenScope(filename, 0, ref XGuid.importerIID, out pUnk);
                Util.ComCheck(pUnk != null, "Failed to open scope");

                importer = Marshal.GetComInterfaceForObject(pUnk, typeof(IMetadataImport));
                object retVal;
                ((ISymUnmanagedBinder)pBnd).GetReaderForFile(importer, filename, null, out retVal);
                private_reader = (ISymUnmanagedReader)retVal;
            }
            catch (Exception x) {
                Console.WriteLine(x.Message);
            }
            finally {
                if (importer != IntPtr.Zero)
                {
                    Marshal.Release(importer);
                }
            }
        }