1

Delphi indy 10 で p2p チャット アプリケーションを開発しています。2 つの質問があります。

1.この機能をポート開放に使用しています。Coinitialize has not been called エラー .i が宣言されていますが、Xp で実行してもこのエラーが発生するため、適切な場所で宣言したかどうかはわかりません。

2.UDPホールパンチを使用している場合、なぜこの関数を呼び出す必要があるのですか? この関数を呼び出さないとチャットできません。

  procedure AddPortThroughUPnP;

  var
  NAT     : Variant;
  Profile : Variant;
  Ports   : Variant;

begin

  if ( not fEnableUPnP ) or ( fServerRole ) then exit;

  if fWindowsName = WINXP then
  begin
  try
  Coinitialize(nil);
    NAT      := CreateOleObject ( 'HNetCfg.FwMgr' );
    Profile  := NAT.LocalPolicy.CurrentProfile;

    if not VarIsClear ( Profile ) then
    begin

      Ports          := CreateOLEObject('HNetCfg.FWOpenPort');
      Ports.Name     := 'UDP Server 6002';
      Ports.Port     := 6002;
      Ports.Scope    := 0;
      Ports.Protocol := 17;
      Ports.Enabled  := True;

      Profile.GloballyOpenPorts.Add ( Ports );

    end;
  finally
     Couninitialize;
  end;

  end
  else
  begin
         try
   Coinitialize(nil);
    NAT   := CreateOleObject ( 'HNetCfg.NATUPnP' );
    Ports := NAT.StaticPortMappingCollection;

    if not VarIsClear ( Ports ) then
       Ports.Add
       ( 6002, 'UDP', fExternalPort, fLocalIP, True, 'UDP Server 6002' );

         finally
         Couninitialize;
         end;
  end;
end;
4

0 に答える 0