C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: オーバーフローにつきまして


(過去ログ 48 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■26330 / inTopicNo.1)  オーバーフローにつきまして
  
□投稿者/ araya (1回)-(2008/10/07(Tue) 10:55:44)

分類:[VB6 以前] 

お世話になります。

[VB6]実行時エラー '6':オーバーフローにつきまして

[VB6]USBメモリ等が接続されたことを知る方法は、サンプルプログラムを利用しています。
ドライブを調べる所で問題のあるUSBメモリの抜き差しがオーバーフローになります。

サンプルプログラム( http://yaplog.jp/orator/archive/76 )

Dim dbcv_unitmask As Long
          ・
          ・
' 得られたドライブを調べる
Dim drv As Variant
For Each drv In GetDrivesFromMask(dbcv_unitmask)
          ・
          ・

問題ないUSBメモリでは(dbcv_unitmask)の数値桁数は4桁でした。
オーバーフローになるUSBメモリでは(dbcv_unitmask)5桁(32768)でした。
試しに半分(dbcv_unitmask/2)にしてみますと得られたドライブナンバーは
正常ではありませんがオーバーフローはなくなりました。

以上のことから何か解決できます方法でご教示願えますと幸いです。
引用返信 編集キー/
■26332 / inTopicNo.2)  Re[1]: オーバーフローにつきまして
□投稿者/ たくボン (47回)-(2008/10/07(Tue) 11:25:59)
No26330 (araya さん) に返信
> お世話になります。
> ドライブを調べる所で問題のあるUSBメモリの抜き差しがオーバーフローになります。
> サンプルプログラム( http://yaplog.jp/orator/archive/76 )

単にサンプルソースのバグだと思います。
まだちょっとしか見てないけど、GetDrivesFromMaskの引数はIntegerですよね。
呼び出し側はLongで呼んでるんじゃないですか?
とりあえず

Private Function GetDrivesFromMask(ByVal unitmask As Integer) As Object()

ここをLongに:-)
引用返信 編集キー/
■26333 / inTopicNo.3)  Re[2]: オーバーフローにつきまして
□投稿者/ araya (2回)-(2008/10/07(Tue) 12:05:25)
たくボン 様

返答下さいましてありがとうございました。

>Private Function GetDrivesFromMask(ByVal unitmask As Integer) As Object()
>ここをLongに:-)

Private Function GetDrivesFromMask(ByVal unitmask As Long) As Variant()
Integer → Long を変更しました。
Variant() → Object() にしましたらGetDrivesFromMask = list.Keys()でオーバーフローになりましたので
Variant()に戻しました。また、Dim mask As Integer でもオーバーフローになりましたので Dim mask As Long
にしました。以上のことにより問題あるUSBメモリを抜き差しても問題なくドライブを調べる事ができるようになりました。
お陰様で解決できました。ご教示下さいまして本当にありがとうございました。

解決済み
引用返信 編集キー/
■26334 / inTopicNo.4)  Re[1]: オーバーフローにつきまして
□投稿者/ 魔界の仮面弁士 (867回)-(2008/10/07(Tue) 12:07:21)
No26330 (araya さん) に返信
> サンプルプログラム( http://yaplog.jp/orator/archive/76 )

失礼しました。修正しておきます。m(_ _;)m

> 問題ないUSBメモリでは(dbcv_unitmask)の数値桁数は4桁でした。
> オーハ゛ーフローになるUSBメモリでは(dbcv_unitmask)5桁(32768)でした。

そのドライブとは、P: でしょうか?

dbcv_unitmask そのものは本来DWORD 型です。
これは、「32 ビットの符号なし整数」なので、VB6 では Long 型
すなわち「32 ビットの符号付き整数」で代用してみてください。

≪修正前≫
Private Function GetDrivesFromMask(ByVal unitmask As Integer) As Variant()
  :
 Dim mask As Integer
 mask = unitmask
  :
End Function


≪修正後≫
Private Function GetDrivesFromMask(ByVal unitmask As Long) As Variant()
  :
 Dim mask As Long
 mask = unitmask
  :
End Function

引用返信 編集キー/
■26335 / inTopicNo.5)  Re[2]: オーバーフローにつきまして
□投稿者/ 魔界の仮面弁士 (868回)-(2008/10/07(Tue) 12:12:54)
遅かった。(^^;
解決チェックを付け直しておきますね。


No26334 (魔界の仮面弁士) に追伸
> ■No26330 (araya さん) に返信
>>サンプルプログラム( http://yaplog.jp/orator/archive/76 )
> 失礼しました。修正しておきます。m(_ _;)m

修正しておきました。
解決済み
引用返信 編集キー/
■26336 / inTopicNo.6)  Re[3]: オーバーフローにつきまして
□投稿者/ araya (3回)-(2008/10/07(Tue) 12:28:30)
魔界の仮面弁士 様

返答下さいましてありがとうございました。

>そのドライブとは、P: でしょうか?
はいそうです、P: で間違いありません。
5桁(32768)の数値に情報があるのと感じました。

>dbcv_unitmask そのものは本来DWORD 型です。
>これは、「32 ビットの符号なし整数」なので、VB6 では Long 型
>すなわち「32 ビットの符号付き整数」で代用してみてください。
以上の説明、また
≪修正前≫ →  ≪修正後≫では確認できました。
本当にありがとうございました。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -