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;