static void Main(string[] args) { if (args == null || args.Length == 0) { Console.WriteLine("usage: ILtoC [path]fileName.ext"); return; } using (var host = new Host()) { var mscorlib = host.LoadUnitFrom("mscorlib.dll") as IAssembly; if (mscorlib == null || mscorlib is Dummy) { Console.WriteLine("mscorlib.dll must be in the same directory as "+args[0]); return; } var coreIdentity = host.CoreAssemblySymbolicIdentity; //Force the host to select the local mscorlib as the core assembly. if (coreIdentity != mscorlib.AssemblyIdentity) { Console.WriteLine("bug in host"); return; } var module = host.LoadUnitFrom(args[0]) as IModule; if (module == null || module is Dummy) { Console.WriteLine(args[0]+" is not a PE file containing a CLR module or assembly."); return; } var moduleLocation = args[0]; Contract.Assume(moduleLocation.Length > 0); PdbReader/*?*/ pdbReader = null; string pdbFileName = Path.ChangeExtension(moduleLocation, "pdb"); if (File.Exists(pdbFileName)) { using (var pdbStream = File.OpenRead(pdbFileName)) { pdbReader = new PdbReader(pdbStream, host); } } var cfile = Path.ChangeExtension(moduleLocation, ".c"); var hfile = Path.ChangeExtension(moduleLocation, ".h"); var moduleFileName = Path.GetFileName(moduleLocation); Contract.Assume(moduleFileName != null && moduleFileName.Length > 0); string location = Path.GetFullPath(moduleLocation).Replace(moduleFileName, ""); ; using (var cStreamWriter = File.CreateText(cfile)) { using (var hStreamWriter = File.CreateText(hfile)) { var cEmitter = new SourceEmitter(cStreamWriter); cEmitter.EmitString("#include \""); cEmitter.EmitString(hfile); cEmitter.EmitString("\""); cEmitter.EmitNewLine(); var hEmitter = new SourceEmitter(hStreamWriter); new Translator(host, module, mscorlib, cEmitter, hEmitter, location, pdbReader).TranslateToC(); } } } }