コード例 #1
0
        public void StartSuspended()
        {
            Debug.Assert(_process == null);

            var info = new ProcessStartInfo("java");

            info.Arguments              = " -jar -Dmode=cli -Dfile.encoding=UTF-8 C:\\bcomp.jar";
            info.RedirectStandardInput  = true;
            info.RedirectStandardOutput = true;
            info.UseShellExecute        = false;
            info.CreateNoWindow         = true;
            info.StandardOutputEncoding = Encoding.UTF8;

            _process           = new Process();
            _process.StartInfo = info;
            _process.Start();

            string code = _sourceFile.GetContents();

            _process.StandardInput.WriteLine("asm");
            _process.StandardInput.WriteLine(code);
            _process.StandardInput.WriteLine("end");

            string line = "";

            while (!line.StartsWith("Программа начинается с адреса"))
            {
                line = _process.StandardOutput.ReadLine();
            }

            ExecutionState = new BasmExecutionState(
                programCounter: uint.Parse(Regex.Match(line, "Программа начинается с адреса\\s*([0-9A-Fa-f]+)").Groups[1].Value, NumberStyles.HexNumber)
                );

            ProcessId = new AD_PROCESS_ID()
            {
                ProcessIdType = (uint)enum_AD_PROCESS_ID.AD_PROCESS_ID_SYSTEM,
                dwProcessId   = (uint)_process.Id
            };
        }