dorzucam kolejny kodzik
function URLNaIP(www: AnsiString): AnsiString;
type
tPinAdr = PInAddr;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
WSAStartup(MakeWord(2,2), WSAData);
HostEnt:= gethostbyname(PAnsiChar(www));
Result:= 'IP: ' + inet_ntoa(tPinAdr(HostEnt^.h_addr_list^)^);
WSACleanup;
end;
//i pod buttonem Label1.Caption:= URLNaIP(Edit1.Text);
i tak nie bardzo wiem co robiłem pisząc to, najpierw w necie przeglądałem jakieś dziwaczne przykłady (niektóre hardkorowo przydługawe z New();, ConCatem do łączenia, wieloma tablicami i pointerami ;/, następnie szukałem "alternatywnego" sposobu po swojemu (czyli metoda prób i błędów). Powyższy kod można na 2 sposoby napisać (po mojemu, bo w necie znalazłem jakieś ze 3-5 innych, ale cholernie pogmatwanych)
type
tPinAdr = PInAddr;
............
Result:= 'IP: ' + inet_ntoa(tPinAdr(HostEnt^.h_addr_list^)^);
albo tak:
type
tPinAdr = in_addr;
pPinAdr = ^tPinAdr;
..........
Result:= 'IP: ' + inet_ntoa(pPinAdr(HostEnt^.h_addr_list^)^);
Czy znacie jakieś książki z wyjaśnieniem co to dokładnie te typy itd, chodzi o:
type
jakas_nazwa = TypZmiennej
Spotkałem się jedynie z którkimi opisami w stylu (a te wyżej po znaku "równa się" nie mają słówka "class"):
type
nazwa = class
i tu niżej zmienne (czasem pod private)
i niżej procedury, funkcje
czasem konstruktor i destruktor, a w initialization Create
Doświadczenia z tym nie mam żadnego (pomijając 10 minutowy kod i użycie type (klasy) jako zbioru zmiennych, bo chciałem sprawdzić, czy mogę zamiast pod "var" się tak pobawić i było w porządku.