Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Wo ist getaddrinfo? (https://www.delphipraxis.net/78374-wo-ist-getaddrinfo.html)

muRR 4. Okt 2006 02:31


Wo ist getaddrinfo?
 
Hallo!
Ich hoffe, dass ihr mir weiterhelfen könnt. Ich stehe vor dem Problem, dass ich eine Internetanwendung basierend auf der hier dokumentierten WinSock-API programmieren wollte und diese anscheinend nicht vollständig in die Unit WinSock implementiert wurde. Zumindest gibt es bei mir die Funktion getaddrinfo nicht. Dabei wird einem doch dringendst zum Gebrauch dieser Funktion anstelle von gethostbyname geraten.
Weiß da jemand mehr?

muRR 4. Okt 2006 14:59

Re: Wo ist getaddrinfo?
 
Hab es jetzt so gelöst, dass ich die Funktion selbst importiere und die benötigten Typen deklariere. Funktioniert nach ersten Tests auch.

Delphi-Quellcode:

uses
  Windows, WinSock;

type
  PAddrInfo = ^TAddrInfo;
  TAddrInfo = packed record
    ai_flags: Integer;
    ai_family: Integer;
    ai_socktype: Integer;
    ai_protocol: Integer;
    ai_addrlen: LongWord;
    ai_canonname: Array of Char;
    ai_addr: PSOCKADDR;
    ai_next: PAddrInfo;
  end;

function getaddrinfo(const nodename: PChar; const servname : PChar; const hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall; external 'ws2_32.dll' name 'getaddrinfo';
procedure freeaddrinfo(ai: PAddrInfo); stdcall; external 'ws2_32.dll' name 'freeaddrinfo';

implementation

...

himitsu 8. Dez 2024 23:37

AW: Wo ist getaddrinfo?
 
Bevor das noch jemand so findet und auf die Idee kommt es benutzen zu wollen...

* Das
Delphi-Quellcode:
Array of Char
ist natürlich falsch und müsste ein PChar PAnsiChar sein.

* Außerdem ist der Code uralt, und seit Unicode (Delphi 2009) müssen die PChar durch PAnsiChar ersetzt werden.
OK, eigentlich war das schon immer falsch, da diese Funktion auch vorher bereits explizit als ANSI definiert war. (wie man in der Dokumentation lesen konnte/kann)



Ansonsten NICHT selbst machen, sondern siehe
addrinfo TAddrInfoA und MSDN-Library durchsuchengetaddrinfo in Winapi.Winsock2.pas
addrinfoW TAddrInfoW und MSDN-Library durchsuchenGetAddrInfoW, ebenfalls in Winapi.Winsock2.pas


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:52 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 by Thomas Breitkreuz