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