WinSockを初期化するには、『WSAStartup』を実行します。
初期化するとWinSockの情報を得ることができるので、どんな情報が見られるのかちょっと眺めてみます。以下のプログラムはWinSockを初期化してその情報を表示するプログラムです。
program startup;
{$APPTYPE CONSOLE}
uses
Windows,WinSock,SysUtils;
var
WSAData: TWSAData;
begin
// WinSock 初期化処理
if WSAStartup($0101, WSAData) <> 0 then
begin
Writeln('初期化に失敗'); Exit;
end;
with WSAData do
begin
// Version
Writeln(Format('実行時バージョン = %d.%d',
[((wVersion shr 8) and $FF), (wVersion and $FF)]));
// 対応できる Version
Writeln(Format('対応可バージョン = %d.%d',
[((wHighVersion shr 8) and $FF), (wHighVersion and $FF)]));
// 説明
Writeln('説明 = ', szDescription);
Writeln('状態 = ', szSystemStatus);
Writeln('最大ソケット個数 = ', iMaxSockets);
Writeln('UDPで一回に受信できるサイズ = ', iMaxUdpDg);
end;
// WinSock 終了処理
WSACleanup;
Readln;
end.
実行したところ |
Delphiには、ユニットを初期化するための便利な初期化部『initilization』が使えるのでWinSockを使うユニットの、initilization部で初期化してしまいましょう。
ちなみに、DelphiのVCLのSocketsユニットでは、以下のように宣言されてました。
var
WSAData: TWSAData;
procedure Startup;
var
ErrorCode: Integer;
begin
ErrorCode := WSAStartup($0101, WSAData);
if ErrorCode <> 0 then
raise ESocketError.Create('WSAStartup');
end;
procedure Cleanup;
var
ErrorCode: Integer;
begin
ErrorCode := WSACleanup;
if ErrorCode <> 0 then
raise ESocketError.Create('WSACleanup');
end;
initialization
Startup;
finalization
Cleanup;