タイトル : Re^3: VolumeDeviceClassで「〜バッファが無効です」エラー 投稿日 : 2015/05/15(Fri) 10:40 投稿者 : 魔界の仮面弁士
> ご推測の通りSimon MourierさんのUsbEject.Libraryを使わせて頂いています。 存在は知っていますが、使った事は無かったりします。 それゆえ、ライブラリ固有の問題となると回答できる内容を持ち合わせていません。 > ※Nothingの判定はNull文字が返ってくるので、vbNullに変えます。 それはもっとマズイです。 vbNull は VarType 関数の戻り値を判断するために使われる 列挙型であり、この場面でつかうようなものではありません。 ちなみに、CInt(vbNull) は「1」という値を返します。 それが「文字」というのであれば、比較するべきは vbNull や DBNull などではなく、 Nothing / vbNullString / vbNullChar / "" などでしょう。 (それぞれの違いは分かりますか?) > Imports System.Management 今回、System.Management 名前空間のクラスも利用されているのでしょうか。 WMI を使う場合、呼び出す機能によっては、追加のアクセス権が 必要になることもあります。(サービスが起動している必要もある) アプリケーションを「管理者権限で実行」してみて、動作が変わるかどうかも確認してみて下さい。 > Res = SetDrvNam(VenNam, SN, DrvNam) <- 挿入しているUSBのベンダ名とSNからドライブレターDrvNamを取得 Res は Response Ven は Vendor Drv は Drive Nam は…なんでしょう、Name? SetDrvNam というのは自作関数でしょうか。 DrvNam を更新するのが目的なら、ByRef 引数を使うのではなく、 DrvNam = GetDrvNam(VenNam, SN) という実装の方が、コードの意図がわかりやすいかと思います。 > 実際のコードは下記のとおりです。 > よろしくお願いします。 エラー箇所はどこでしょうか? 先の投稿と合わせると、発生箇所とおぼしきは: (1) 「New VolumeDeviceClass()」によるインスタンス生成 (2) 「volumeDeviceClass.Devices」によるコレクション取得 (3) 「For Each device As Volume」でのコレクション列挙 あたりでしょうか。 現在、2 と 3 は同一行になっているので、コレクションを一度変数に受けるなどして、 どちらの問題であるか切り分けてみて下さい。 また、エラー発生時に、その例外の StackTrace の内容も精査してみてください。 |