タイトル : 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 句に行ってしまいます。 |