1
我在Windows 10 64位中使用西雅圖。如何獲取IStaticPortMappingCollection.Add的返回值是否返回?
我嘗試通過upnp轉發一個端口並獲取返回值。端口轉發工作正常,但下面一行使'不能將類型(調度)的變體轉換爲類型(整數)'窗口。
_hResult := _Ports.add(_PortNumber, 'TCP', _PortNumber, Edit1.Text, True, _PortName);
您可以在以下msdn網頁中找到返回值類型。
https://msdn.microsoft.com/en-us/library/windows/desktop/aa366148(v=vs.85).aspx
整個代碼是
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, System.Win.ComObj, Vcl.StdCtrls;
procedure TForm1.FormClick(Sender: TObject);
var
_NAT: Variant;
_Ports: Variant;
_PortNumber: Integer;
_PortName: string;
_hResult: HRESULT;
begin
_NAT := CreateOleObject('hnetcfg.natupnp');
_Ports := _NAT.staticportmappingcollection;
_PortNumber := 8000;
_PortName := 'test';
if VarIsClear(_Ports) then // $00000000
begin
Caption := 'error';
end
else
begin
_hResult := _Ports.add(_PortNumber, 'TCP', _PortNumber, Edit1.Text, True, _PortName);
if _hResult = S_OK then
begin
Caption := 'succeeded';
end;
end;
end;
您的_變量命名約定是非標準的,非常光柵。 –