【VBA】【Excel(64bit)】WinSockの起動(WSAStartup) と終了(WSACleanup)サンプル

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

 

ライセンス:本記事のテキスト/コードは特記なき限り CC BY 4.0 です。引用の際は出典URL(本ページ)を明記してください。
利用ポリシー もご参照ください。

コメント

タイトルとURLをコピーしました