アプリ版:「スタンプのみでお礼する」機能のリリースについて

VisualVasic 6.0 Professional Edition (SP 5)を使用しています。

WinsockコントロールのErrorイベントに関する質問です。このイベントでエラーを出したいと思っているのですが、
オーバーフローしてしまい、うまくいかず困っています。

MSDNライブラリの説明では、

object_Error(number As Integer, _
Description As String, _
Scode As Long, (以下略)

というふうになっていて

numberの説明は、「エラー コードが整数で渡されます。
返される値については、次の「設定値」を参照してください」
となっています。

ここまでは良いのですが、その設定値で
「sckBadState :(値)40006
要求されたトランザクションまたは要求に対して、
プロトコルまたは接続の状態が正しくありません。」
などの値がnumberに渡ってしまうとオーバーフローしてしまいます。
何か良い対策方法はないでしょうか?

現在は、
Select Case Number
Case sckBadState '40006
--処理内容--
End Select

などというふうに書いています。

よろしくお願いします。

A 回答 (2件)

たぶん、エラーコードは符号なし2byte整数なのかな


それをlong型に変換してやればいいと思います。

Private Sub Winsock1_Error(Number As Integer, (以下略)

Select Case UnsignedShort2Long(Number)
Case sckBadState
End Select
End Sub

'Unsigned Shortをlong型に変換
Private Function UnsignedShort2Long(ByVal n As Integer) As Long
If (n >= 0) Then
UnsignedShort2Long = n
Else
UnsignedShort2Long = &H8000& + (n And &H7FFF)
End If
End Function
    • good
    • 0

Integer型は、-32,768 ~ 32,767の範囲以外だと


オーバーフローします。#1の方がおっしゃるように
Long型なら-2,147,483,648 ~ 2,147,483,647まで
大丈夫なのでこれでいけるでしょう。
エラーナンバーは整数値なのでSingle型やDouble型に
する必要はありません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!