2011-07-19 19 views
0

Delphi 7で以下の関数を作成しました。 UDP_TABLE_OWNER_PID = 5;Delphi 7でGetExtendedUdpTableが機能しない

{For UDP} 
    UDP_TABLE_OWNER_PID = 5; 
    type 

     UDP_TABLE_CLASS = Integer; 

     PMibUdpRowOwnerPid = ^TMibUdpRowOwnerPid; 
     TMibUdpRowOwnerPid = record//packed record 
      dwState  : DWORD; 
     dwLocalAddr : DWORD; 
    //dwLocalPort : DWORD; 
      dwRemoteAddr: DWORD; 
// dwRemotePort: DWORD; 
      dwOwningPid : DWORD; 
      end; 


    PMIB_UDPTABLE_OWNER_PID = ^MIB_UDPTABLE_OWNER_PID; 
    MIB_UDPTABLE_OWNER_PID =record// packed record 
     dwNumEntries: DWord; 
     table: array [0..ANY_SIZE - 1] OF TMibUdpRowOwnerPid; 
     end; 

    procedure TFmainViewTCP.ShowCurrentUDPConnections(StatusType:String); 
    var 
    Error  : DWORD; 
    TableSize : DWORD; 
     i   : integer; 
    IpAddress : in_addr; 
    RemoteIp  : string; 
     LocalIp  : string; 
     ver:Integer; 
     ProcName:string; 
    FExtendedUdpTable : PMIB_UDPTABLE_OWNER_PID; 
    lItem:TListItem; {for displaying the output} 
     countRow:Integer; 
    begin 
     i:=0; 
    TableSize := 0; 
    countRow:=0; 

    Error := GetExtendedUdpTable(nil, @TableSize, False,AF_INET,UDP_TABLE_OWNER_PID, 0); 

    if Error <> ERROR_INSUFFICIENT_BUFFER then 
    begin 
      if Error=ERROR_INVALID_PARAMETER then 
      begin 
      ShowMessage(IntToStr(Error));//Error code is 87, shown here 
      end; 

      Exit; 
     end; 

コードにエラーがありますが、わかりません。ヘルプは高く評価されます。事前に

おかげで

+1

コードはそのようにインデントされていますか?もしそうなら、それはあなたの問題の大きな部分です。そうでない場合は、質問の字下げが正しいことを確認する時間を費やしてください。 –

+1

ボイラープレートのdwStateフィールドをコメントアウトしています。 –

+0

インデントは本当に私の心配ではありません。助けてください。 – CyprUS

答えて

0

エラーだった... uは私は、あなたのコードを修正するためにゼロから何かをコーディングすることは簡単だった始めるために何かであることUDP_TABLE_OWNER_PID = 1;私が設定した5の代わりに。また、ダビデのようなdwStateも指摘していました。

0

MIB_UDPROW_OWNER_PIDのあなたの宣言が正しくありません。それはdwStateのメンバーを持っていません。それがエラーの原因です。また、dwRemoteAddrはありません。代わりにdwLocalPortが必要です。ここで

+0

私はそれをしました。エラーを削除しませんでした – CyprUS

+0

私はあなたのコードを実行すると、期待通りに 'ERROR_INSUFFICIENT_BUFFER'を取得します。もちろん、それをコンパイルするための宣言をいくつか追加しなければなりませんでした。あなたは悪魔的に悪い字下げでコードを書いても問題ないと思っているようですが、混乱したコードがあなたの問題の大きな部分であると確信しています。数えられるビット数を見ることができないので、コード内で何が間違っているのかを知ることは不可能です。 –

1

type 
    MIB_UDPROW_OWNER_PID = record 
    dwLocalAddr: DWORD; 
    dwLocalPort: DWORD; 
    dwOwningPID: DWORD; 
    end; 

type 
    MIB_UPDATE_TABLE = record 
    dwNumEntries: DWORD; 
    UDP_TABLE: array [0 .. 0] of MIB_UDPROW_OWNER_PID; 
    end; 

    PMIB_UPDATE_TABLE = ^MIB_UPDATE_TABLE; 

function GetExtendedUdpTable(pUdpTable:Pointer;dwSize:PDWORD;bOrder:Boolean;uAlf:ULONG;TableClass:Integer;Reserved:ULONG):DWORD;stdcall;external 'iphlpapi.dll'; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
var 
    PID_ : PMIB_UPDATE_TABLE; 
    dwSize:DWORD; 
    i: Integer; 
begin 
    GetExtendedUdpTable(nil,@dwSize,false,2,1,0); 
    GetMem(PID_,dwSize); 
    GetExtendedUdpTable(PID_,@dwSize,false,2,1,0); 
    for i := 0 to PID_^.dwNumEntries - 1 do 
    ShowMessage(IntToStr(PID_^.UDP_TABLE[i].dwOwningPID)); 
end; 
+0

btwコードの書式設定に問題がある場合は、delphi xeまたはdelphi 2010を購入することをお勧めします。IDEは、Ctrl + Dキーを押すだけでコードをフォーマットします。ありがとうございます。 – opc0de

+0

あなたは私に助けをくれた – CyprUS

関連する問題