2014-02-19 4 views
1

안녕하세요 모든 사람이이 오류가 C#을 로 작성 내 응용 프로그램을 디버깅에 오류가있어 : 할당되지 않은 지역 변수의사용은 "SHELLEXECUTEINFO"

사용 "SHELLEXECUTEINFO"

가 본 인 오류 줄 cbSize = Marshal.SizeOf (sHELLEXECUTEINFO),

나는이 오류가 발생하는 이유 또는 해결 방법을 알지 못합니다.

private bool PWOLaunch(int iTab) 
    { 
     string pWOLocation = Settings.Default.PWOLocation; 
     if (!File.Exists(pWOLocation)) 
     { 
      this.openFileDialog1.ShowDialog(); 
      pWOLocation = this.openFileDialog1.FileName; 
      if (!pWOLocation.Contains("PWO.exe")) 
      { 
       MessageBox.Show("Failed to Locate file: PWO.exe\nThis bot is only for Pokemon World Online!"); 
       return false; 
      } 
      if (pWOLocation.Contains("PWO.exe")) 
      { 
       Settings.Default.PWOLocation = pWOLocation; 
       Settings.Default.Save(); 
      } 
     } 
     Form1.PROCESS_INFORMATION pROCESSINFORMATION = new Form1.PROCESS_INFORMATION(); 
     Form1.STARTUPINFO sTARTUPINFO = new Form1.STARTUPINFO(); 
     Form1.SECURITY_ATTRIBUTES sECURITYATTRIBUTE = new Form1.SECURITY_ATTRIBUTES(); 
     Form1.SECURITY_ATTRIBUTES sECURITYATTRIBUTE1 = new Form1.SECURITY_ATTRIBUTES(); 
     Form1.SHELLEXECUTEINFO sHELLEXECUTEINFO = new Form1.SHELLEXECUTEINFO() 
     { 
      cbSize = Marshal.SizeOf(sHELLEXECUTEINFO), 
      lpFile = pWOLocation, 
      nShow = 1, 
      lpVerb = "runas", 
      fMask = 64 
     }; 
     if (!Form1.CreateProcess(pWOLocation, null, ref sECURITYATTRIBUTE, ref sECURITYATTRIBUTE1, false, 32, IntPtr.Zero, null, ref sTARTUPINFO, out pROCESSINFORMATION)) 
     { 
      MessageBox.Show("Failed to Launch file: PWO.exe"); 
      return false; 
     } 
     StringBuilder stringBuilder = new StringBuilder("ThunderRT6FormDC"); 
     IntPtr zero = IntPtr.Zero; 
     while (zero == IntPtr.Zero) 
     { 
      zero = this.FindProcessWindow(stringBuilder, pROCESSINFORMATION.dwProcessId); 
     } 
     if (!this.EmbedGame(zero, iTab)) 
     { 
      MessageBox.Show("Failed to launch game into bot"); 
     } 
     this.gameWindowHandles[iTab] = zero; 
     this.gameProcesshandles[iTab] = pROCESSINFORMATION.dwProcessId; 
     this.gameBotHandles[iTab] = IntPtr.Zero; 
     this.gameLogHandles[iTab] = IntPtr.Zero; 
     Form1.ShowWindow(this.gameWindowHandles[1], 0); 
     this.launchAllToolStripMenuItem.Text = "Restart Game"; 
     return true; 
    } 
+0

나쁜 게재에 대해 죄송합니다. 여기 새로 왔으며 질문을 편집하는 방법을 모르겠습니다 ... – user3328787

+0

질문 아래에 '수정'버튼이 있습니다. 그런데 Stack Overflow에 오신 것을 환영합니다. 이 사이트는 [FAQ], [ask] 및 [help]를 읽기 시작할 수 있습니다. –

+0

감사합니다. – user3328787

답변

3

초기화 프로그램이 변수를 초기화하기 전에 사용하고 있습니다. 초기화 도구가있는 일반적인 닭고기 및 계란 문제.

Form1.SHELLEXECUTEINFO sHELLEXECUTEINFO = new Form1.SHELLEXECUTEINFO() 
    { 
     lpFile = pWOLocation, 
     // etc... 
    }; 
    sHELLEXECUTEINFO.cbSize = Marshal.SizeOf(sHELLEXECUTEINFO)); 

하는 BTW 코드를 검토 할 누군가에게 질문

Form1.SHELLEXECUTEINFO sHELLEXECUTEINFO = new Form1.SHELLEXECUTEINFO() 
    { 
     cbSize = Marshal.SizeOf(typeof(Form1.SHELLEXECUTEINFO)), 
     lpFile = pWOLocation, 
     // etc... 
    }; 

또는 더 일반적인 솔루션 : 당신은 다른 오버로드를 사용할 수 있습니다.

0

C# 컴파일러에서는 초기화되지 않은 변수를 사용할 수 없습니다. 변수를 사용하기 전에 sHELLEXECUTEINFO 변수를 초기화하지 않은 것 같습니다.

+0

빠른 응답 덕분에 빠른 것이 었습니다. 하지만 초기화하는 방법은 무엇입니까? – user3328787

+0

@ user3328787하지만 코드를 다시 포맷하십시오. 그래서 우리는 당신을 더 잘 도울 수 있습니다. –

+0

이제 코드 편집 버튼을 다시 작성했습니다. D – user3328787