![]() |
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:
Ich habe mich leider noch nie mit Records beschäftigt (mache ich aber sofort) und weiß auch nicht, was 'stdcall' heißt.
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. Vielen Dank schon mal im Vorraus für die Hilfe!!! Viele Grüße vom LAWn-M0W3R |
[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 * * * |
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:
![]() 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: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz