拝啓、管理人さんへ、 いつもお世話になっております。 NetWorkSendUDPで返り値が-1と帰ってくることがありますが、その場合プログラム内でUDPパケットの送信機能自体が止まるように感じます。 返り値-1とはどういったエラーの時でしょうか?お時間あるときで結構ですのでお答えいただければと思います。 敬具。
NetWorkSendUDP の戻り値が -1 になるケースはネットワークハンドルが無効になった場合などがありますが、 恐らく一番可能性が高いのはDXライブラリが通信に使用している API である WinSock で何かエラーが発生した場合だと思います WinSock で発生したエラーの種類を取得するための関数を追加しましたので、 よろしければこちらの関数で本件の現象が発生した際に WinSock のどのようなエラーが発生したのか 取得して確認してみてください m(_ _)m <追加した関数> // WinSock で最後に発生したエラーのコードを取得する int GetWinSockLastError( void ) ; 戻り値とエラーの種類の対応はこちらのページを参照してください https://msdn.microsoft.com/en-us/library/windows/desktop/ms740668(v=vs.85).aspx ( 英語のページですが、Chrome などでページ丸ごと日本語に翻訳すると大体読めます ) 上記の関数を追加したバージョンをこちらにアップしましたので、よろしければダウンロードしてください m(_ _)m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、 BCCをお使いの場合は『再構築』をして下さい )
ありがとうございます!!早速試してみてみます!!
手厚いサポートありがとうございます。早速調べてみましたが、1403というあまり見ない値がかえって来たので戸惑っています。 もし管理人さんこれについてなにかご存知であれば教えていただけないでしょか?
1403ですか・・・確かに WinSock 専用のエラーコードではないですね GetWinSockLastError() は『最後に発生した WinSock のエラーのエラーコード』を返す関数なので、 もしかしたら NetWorkSendUDP 内の WinSock の API 呼び出しによって発生したエラーではないのかもしれません 今回、確実に『NetWorkSendUDP 内の WinSock の API 呼び出しによってエラーが発生したかどうか』を 判断できるようにするために 『NetWorkSendUDP 内の WinSock の API 呼び出しによってエラーが発生した場合は NetWorkSendUDP の 戻り値が -2 以下( -2 又は -3 又は -4 )になる』 ようにしてみましたので、よろしければこちらのバージョンで、NetWorkSendUPD でエラーが発生した際の 戻り値が -2 以下かどうか( WinSock 関係のエラーか )を確認してみてください m(_ _;m https://dxlib.xsrv.jp/temp/DxLibVCTest.exe // Windows版 VisualC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCCTest.exe // Windows版 BorlandC++ 用 https://dxlib.xsrv.jp/temp/DxLibBCC2Test.exe // Windows版 C++ Builder 10.1 Berlin 用 https://dxlib.xsrv.jp/temp/DxLibGCC_MinGWTest.exe // Windows版 MinGW 用 https://dxlib.xsrv.jp/temp/DxLibDotNet.zip // Windows版 .NET用 https://dxlib.xsrv.jp/temp/DxLibMakeTest.exe // ソース ( 中身を既存のライブラリのファイルに上書きして、VisualStudioをお使いの場合は『リビルド』を、 BCCをお使いの場合は『再構築』をして下さい ) もしその上で『NetWorkSendUDP 内の WinSock の API 呼び出しによるエラー』で、且つ GetWinSockLastError() の 戻り値が 1403 だとしますと、何らかの原因で UDP 通信のための WinSock のハンドルが無効になってしまっている可能性があります その場合は一度UDP通信用ネットワークハンドルを DeleteUDPSocket で削除して、改めて MakeUDPSocket で UDP通信用の ネットワークハンドルを作成してそれを使用するようにすれば再び NetWorkSendUDP が成功するようになるかもしれません ( もしもっと根深い問題だとしますと、UDP通信用ネットワークハンドルを作成しなおしても駄目かもしれませんが・・・ )
管理人さん、ありがとうございます。 さっそく試してみます。状態として、キー圧下が条件のIF文のなかにsendUDPを入れているのですが、