2014-02-19 107 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

有你的問題下'edit'按鈕。順便說一下,歡迎來到Stack Overflow。你可以開始學習這個網站閱讀[常見問題],[問]和[求助] –

+0

感謝發現它 – user3328787

回答

3

你的初始化器使用變量在初始化之前。初始化程序常見的雞與雞問題。你可以只使用其他重載:

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

或者更一般的解決方案:

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

叫人BTW檢查你的代碼。

0

C#編譯器不允許使用未初始化的變量。看起來你在使用它之前未初始化的變量sHELLEXECUTEINFO

+0

這是快速的答案感謝您的快速。 但是如何初始化它? – user3328787

+0

@ user3328787但請重新格式化您的代碼。所以我們可以幫助你更好。 –

+0

現在我重新格式化我的代碼,我發現的編輯按鈕:d – user3328787