Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ping Bitte um Erläuterung (https://www.delphipraxis.net/80993-ping-bitte-um-erlaeuterung.html)

LAWn-M0W3R 18. Nov 2006 19:00


Ping Bitte um Erläuterung
 
Hallo,

ich habe eine dringende Bitte: Ich muss am Montag zwei Stunden lang meinen Mitschülern im Informatikunterricht objektorientiertes Programmieren erklären. Die erste Stunde mache ich Definitionen, Diagramme und wichtige Methoden und die zweite Stunde möchte ich eben mit ihnen zusammen ein Programm erarbeiten, dass einen Ping über die icmp.dll durchführt. Ich habe bereits einen Button selber gemacht (wegen Klassen und so). Die Ping-Prozedur habe ich mal im Web gefunden, sie funktioniert auch super, aber ich weiß nicht wie (Das muss ich aber genau wissen, um sie vorzustellen!).

Ich wäre euch total dankbar, wenn sich bis morgen Abend :pale: einer findet, der sich die Mühe machen würde den folgenden Quelltext zu kommentieren!
Delphi-Quellcode:
unit Unit2;

interface
uses
  Windows, SysUtils, Classes;

type
  TSunB = packed record
    s_b1, s_b2, s_b3, s_b4: byte;
  end;

  TSunW = packed record
    s_w1, s_w2: word;
  end;

  PIPAddr = ^TIPAddr;
  TIPAddr = record
    case integer of
      0: (S_un_b: TSunB);
      1: (S_un_w: TSunW);
      2: (S_addr: longword);
  end;

 IPAddr = TIPAddr;

function IcmpCreateFile : THandle; stdcall; external 'icmp.dll';
function IcmpCloseHandle (icmpHandle : THandle) : boolean;
            stdcall; external 'icmp.dll'
function IcmpSendEcho
   (IcmpHandle : THandle; DestinationAddress : IPAddr;
    RequestData : Pointer; RequestSize : Smallint;
    RequestOptions : pointer;
    ReplyBuffer : Pointer;
    ReplySize : DWORD;
    Timeout : DWORD) : DWORD; stdcall; external 'icmp.dll';


function Ping(InetAddress : string) : boolean;

implementation

uses
  WinSock;


procedure TranslateStringToTInAddr(AIP: string; var AInAddr);
var
  phe: PHostEnt;
  pac: PChar;
  GInitData: TWSAData;
begin
  WSAStartup($101, GInitData);
  try
    phe := GetHostByName(PChar(AIP));
    if Assigned(phe) then
    begin
      pac := phe^.h_addr_list^;
      if Assigned(pac) then
      begin
        with TIPAddr(AInAddr).S_un_b do begin
          s_b1 := Byte(pac[0]);
          s_b2 := Byte(pac[1]);
          s_b3 := Byte(pac[2]);
          s_b4 := Byte(pac[3]);
        end;
      end
      else
      begin
        raise Exception.Create('Error getting IP from HostName');
      end;
    end
    else
    begin
      raise Exception.Create('Error getting HostName');
    end;
  except
    FillChar(AInAddr, SizeOf(AInAddr), #0);
  end;
  WSACleanup;
end;

function Ping(InetAddress : string) : boolean;
var
 Handle : THandle;
 InAddr : IPAddr;
 DW : DWORD;
 rep : array[1..128] of byte;
begin
  result := false;
  Handle := IcmpCreateFile;
  if Handle = INVALID_HANDLE_VALUE then
   Exit;
  TranslateStringToTInAddr(InetAddress, InAddr);
  DW := IcmpSendEcho(Handle, InAddr, nil, 0, nil, @rep, 128, 0);
  Result := (DW <> 0);
  IcmpCloseHandle(Handle);
end;

end.
Ich habe mich leider noch nie mit Records beschäftigt (mache ich aber sofort) und weiß auch nicht, was 'stdcall' heißt.
Vielen Dank schon mal im Vorraus für die Hilfe!!!

Viele Grüße vom LAWn-M0W3R

r_kerber 18. Nov 2006 19:51

[team]
 
Wir sind hier kein "Mach mir die Hausaufgaben Forum". Du sollst Montag Deine eigenen Kenntnisse vortragen und nicht die der DP-User.
* * * C L O S E D * * *

Luckie 18. Nov 2006 19:58

Re: Ping Bitte um Erläuterung
 
Obwohl schon geschlossen noch ein Hinweis meiner Seits. Objektorientierung an Hand einer API Funktion aus einer DLL zu demonstrieren ist ein sehr schlechtes Beispiel. Guck dir mal mein Tutorila zum Thema "Klassen in Delpohi" an: http://delphitutorials.michael-puff.de

Oder aber mach es wie unser BS Lehrer und nimm VB Script. Das ist auch sehr gut dazu geeignet, weil das ganze Overhead einer Programmiersprache wie Klassen-Deklarationen, Variablen-Deklarationen usw. fehlt. Siehe dazu auch meine Beispiele aus unserem Unterricht: http://www.michael-puff.de/dirindex....%20-%20Johlen/ -> VBScripte. Im Ordner Sonstiges liegt noch ein umfangreiches Beispiel für die Objetorientierung mit Delphi. Dies entstand nach einem Klassendiagramm, welches wir im Unterricht mal besprochen haben und welches wir, auf freiwilliger Basis und soweit wir konnten, mal in einer Programmiersprache umsetzen sollten, welche wir schon können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz