我正在delphi indy 10中开发一个p2p聊天应用程序。我有两个问题。
1.我正在使用此功能进行端口打开。它给Coinitialize没有被称为错误.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;