2012-05-23 3 views
-1

Visual Studio에서와 같이 약간의 직접 실행 창을 만들었습니다. Textedit에서 텍스트를 컴파일하려고합니다. 이제 내 질문 : 어떻게 실행중인 프로그램의 범위에 들어갈 수 있습니까? 내 프로그램의 가치 또는 목록을 변경하는 것이 가능합니까?간단한 직접 실행 창

private void SimpleButtonCompileClick(object sender, EventArgs e) 
    { 
     CompilerParameters compilerParameters = new CompilerParameters(); 
     compilerParameters.GenerateExecutable = true; 
     compilerParameters.GenerateInMemory = true; 
     compilerParameters.TreatWarningsAsErrors = true; 
     compilerParameters.CompilerOptions = "/nowarn:1633"; 
     String sourceCode = ""; 
     string pattern = 
       "\\s*#pragma\\s+reference\\s+\"(?<path>[^\"]*)\"\\s*"; 
     System.Text.RegularExpressions.Match match = System.Text.RegularExpressions.Regex.Match(sourceCode, pattern); 
     if (match.Success) 
      compilerParameters.ReferencedAssemblies.Add(match.Groups["path"].Value); 
     // Specify .NET version 
     Dictionary<string, string> providerOptions = 
       new Dictionary<string, string>(); 
     providerOptions.Add("CompilerVersion", "v3.5"); 
     CSharpCodeProvider provider = new CSharpCodeProvider(providerOptions); 
     // Compile source   
     CompilerResults results = provider.CompileAssemblyFromSource(compilerParameters, new string[] {sourceCode}); 
     // Show errors 
     if (results.Errors.HasErrors) 
     { 
      String errorString = ""; 
      foreach (var err in results.Errors) 
       errorString += err + "\n"; 
      XtraMessageBox.Show(errorString); 
     } 
     else 
     { 
      // Invoke compiled assembly's entry point 
      results.CompiledAssembly.EntryPoint.Invoke 
        (null, new object[0] {}); 
     } 
    } 

답변

0

난 당신이하는 방법 (? 버튼 키 조합)가 이해가 당신이 컴파일하고 실행하고자하는 코드를 입력 할 수있는 양식을 제공합니다 : 내 현재 컴파일 코드를 이잖아. Invoke는 동일한 프로세스와 AppDomain에서 실행되므로 액세스 할 지점에 액세스하려는 경우 실행중인 프로그램의 모든 항목에 액세스 할 수 있습니다.

예를 들어 클래스 중 하나에서 공용 정적 변수가 될 수 있습니다. 또는 특정 양식을 얻으려면 Application.OpenForms를 사용하고 올바른 Type이있는 FormCollection을 찾으십시오.

관련 문제