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を利用し指定時間経過後にサブプロセスを実行する例

コメント