tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Re: VolumeDeviceClassで「〜バッファが無効です」エラー
投稿日: 2015/05/14(Thu) 13:42
投稿者魔界の仮面弁士
.NET Framework に、VolumeDeviceClass というクラスは用意されていなかったように
思うのですが、それは自作されたクラスなのでしょうか?
(Simon Mourierさんの UsbEject Library のことかな…)


> Dim res as string
As や string が小文字になっているところをみると、
実際のコードの一部を切り出したというよりは、
掲示板投稿用に小改修したもののようですね。


>       Dim volumeDeviceClass As New VolumeDeviceClass()
>             ↑
>    この時点でVolumeDeviceClass.Devices=要求された操作に対して与えられた
>       バッファが無効ですとなっている

それは ERROR_INVALID_USER_BUFFER というエラーですね。
.NET のものというよりも、Windows API が用いるエラーメッセージであり、
VB から意図的に発生させる場合には、
  Throw New System.ComponentModel.Win32Exception(1784)
のようなコードを使います。


さしあたり、VolumeDeviceClass のクラス宣言を見せて下さい。
(自作したものでは無いのなら、アセンブリの入手先や名前空間を教えてください)

コンストラクタの呼び出し時(すなわち New した段階)でのエラーではなく、
Devices というメンバー(フィールド? Function? Property?)へのアクセスで
失敗しているのなら、そこに至るまでの部分に問題がありそうです。


> if res=Nothing then
Nothing は = 演算子ではなく、Is 演算子もしくや IsNot 演算子でチェックしてください。

たとえば
 Dim s1 As String = ""
 Dim s2 As String = Nothing
 Dim i3 As Integer? = 0
 Dim i4 As Integer? = Nothing
があった場合、Nothing なのは s2 と i4 ですよね。
その 2 つを正しく判断するには、
 If x Is Nothing Then
の構文が必要となります。もしも
 If x = Nothing Then
の構文にしてしまうと、s1、s2、i3 がヒットし、i4 は Else 句に行ってしまいます。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。