なでしこ > Delphi > 戻る

WinSockの初期化

 WinSockを使うには初期化が必要です。
■初期化の方法
■ユニットにまとめる

初期化の方法

 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;

 



→トップへ →目次へ