1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
Option Explicit Private Const WSA_DESCRIPTIONLEN As Long = 256 Private Const WSA_DESCRIPTIONSIZE As Long = WSA_DESCRIPTIONLEN + 1 Private Const WSA_SYS_STATUS_LEN As Long = 128 Private Const WSA_SYSSTATUSSIZE As Long = WSA_SYS_STATUS_LEN + 1 Public Type WSAData wVersion As Integer wHighVersion As Integer szDescription As String * WSA_DESCRIPTIONSIZE szSystemStatus As String * WSA_SYSSTATUSSIZE iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type Private Declare PtrSafe Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequested As Integer, ByRef lpWSAData As WSAData) As Long Public Declare PtrSafe Function WSACleanup Lib "wsock32.dll" () As Long Sub test() Dim RetCode As Long Dim WSAData As WSAData 'スタートアップ RetCode = WSAStartup(MAKEWORD(2, 2), WSAData) '参考;https://docs.microsoft.com/ja-jp/windows/win32/api/winsock2/ns-winsock2-wsadata Debug.Print "RetCode =" & reRetCodet Debug.Print "wVersion = " & WSAData.wVersion 'バージョンに何を入れてモ winSock2.0 Debug.Print "wHighVersion = " & WSAData.wHighVersion Debug.Print "szDescription = " & WSAData.szDescription Debug.Print "szSystemStatus = " & WSAData.szSystemStatus Debug.Print "iMaxSockets(Windows ソケット バージョン 2 以降では無視) = " & WSAData.iMaxSockets Debug.Print "iMaxUdpDg((Windows ソケット バージョン 2 以降では無視) = " & WSAData.iMaxUdpDg Debug.Print "lpVendorInfo ((Windows ソケット バージョン 2 以降では無視)= " & WSAData.lpVendorInfo 'クリーンナップ ret = WSACleanup() End Sub 'VCにあるMAKEWORDマクロと等価ロジック Private Function MAKEWORD(ByVal LoByte As Byte, ByVal HiByte As Byte) As Integer If HiByte And &H80 Then MAKEWORD = ((HiByte * &H100&) + LoByte) Or &HFFFF0000 Else MAKEWORD = (HiByte * &H100) + LoByte End If End Function |
過去のブログで公開してたWinsockを使ったソケット通信プログラムの切り出し。
まずは復讐で、Winsockの起動と終了まで
もう十分枯れた技術で、今更Excel VBA でとも思ったが、最近見かけたApplication.timerを利用したマルチプロセスのコードをみて、
もしかしてExcel VBAレベルでソケットを使った並列処理と相性がいいのではいうアイデアから、久々にWinsockを使おうかなと思いの復習開始。
とりあえず起動はできるから、次にudp通信にチャレンジしてみよう。
参考:【EXCEL】【VBA】Application.OnTimeを利用し指定時間経過後にサブプロセスを実行する例
コメント