2009-06-28 17 views
2

今回は、なぜ私はそれがなぜ存在するかを理解しようとしているエラーがあります。エラーは無視できますが、なぜそれが第1位に存在するのかを知りたいのですが。SetupDiGetDeviceInterfaceDetail説明できないエラー

result = SetupDiGetDeviceInterfaceDetail(deviceInfoSet, ref anInterface, IntPtr.Zero, 0, ref buffersize, IntPtr.Zero); 
      if (!result) 
      { 
       int errCode = Marshal.GetLastWin32Error(); 
       errorMessage = new Win32Exception(Marshal.GetLastWin32Error()).Message; 
       statusLabel.Text += "\n(1)SetupDiGetDeviceInterfaceDetail Error: " + errCode + " => " + errorMessage + "."; 
       //break; 
      } 

これは単に関数の2番目の呼び出しにBUFFERSIZE変数を設定するためのものであり、この関数の第一の呼び出しです。 122 =>システムコールに渡されたデータ領域が小さすぎます。 エラーメッセージから判断すると、2番目のパラメータ(ref anInterface)と何か関係があり、2番目のパスでこれを無視することができます。しかし、エラーはまだ存在し、なぜ私が「後ろ」の場所に噛み付くのが戻ってくるのか知りたいのですが。 問題のパラメータが宣言され、このように定義されている:私は、MSDNの記事を離れて選んだと私の知る限り、ここでのコードと間違って何もない

[StructLayout(LayoutKind.Sequential)] // defined here 
    public struct SP_DEVICE_INTERFACE_DATA 
    { 
     public uint cbSize; 
     public Guid InterfaceClassGuid; 
     public uint Flags; 
     public IntPtr Reserved; 
    } 

anInterface = new SP_DEVICE_INTERFACE_DATA(); // declared here 
     anInterface.cbSize = (uint)Marshal.SizeOf(anInterface); 
     anInterface.InterfaceClassGuid = Guid.Empty; 
     anInterface.Reserved = IntPtr.Zero; 
     anInterface.Flags = 0; 

答えて

3

これは設計上の問題です。あなたがコメント欄の下にhereを見れば:インターフェースの詳細を取得するには、この機能を使用して

通常、2段階のプロセスである:

1)必要なバッファサイズを取得します。 SetupDiGetDeviceInterfaceDetailをNULL DeviceInterfaceDetailDataポインタ、DeviceInterfaceDetailDataSizeをゼロ、有効なRequiredSize変数を指定して呼び出します。この呼び出しに応答して、この関数はRequiredSizeに必要なバッファサイズを返し、GetLastErrorがERROR INSUFFICIENT BUFFERを返して失敗します。
2)適切なサイズのバッファを割り当て、関数を再度呼び出してインタフェースの詳細を取得します。

あなたはerror codes下ERROR十分なバッファを見れば、あなたはそれが122

進値であることがわかります
関連する問題