Hola,
Cita:
Empezado por Antuan
Perdonar por haber cometido tan gran error.
|
Nada, hombre, qué dices, no hay nada que perdonar
Por otro lado con la función que escribes últimamente hay un pequeño problema para hacer que esta pase a devolver una cadena, o sea, una variable de tipo "string". ¿Porqué? Pues porque por algo devuelve el tipo que devuelve: la función se llama "GetIps" y puede devolver varias IPs, no solamente una.
Claro está, sería más sencillo de "recorrer" el resultado de la función para obtener cada una de las IPs devuelta, o una, si ese fuera el caso. Desconozco cómo hace lo que hace la función y si, por ejemplo, siempre devuelve una primera IP, digamos, principal, por defecto, acaso la que se persigue... de no ser así... devolver el resultado como "string" podría ocasionarte quebraderos de cabeza, puesto que la variable "resultado" podría contener más de una IP... y habría a partir de ahí que discriminarlas.
En todo caso, así quedaría la función devolviendo una cadena, un tipo "string", en lugar de un "TStrings":
Código Delphi
[-]
function getIPs: string;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
temp: TStrings;
begin
Result := '';
WSAStartup($101, GInitData);
temp := TstringList.Create;
temp.Clear;
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
try
while pPtr^[i] <> nil do
begin
temp.Add(inet_ntoa(pptr^[i]^));
Inc(I);
end;
Result := temp.Text;
finally
temp.Free;
end;
WSACleanup;
end;
Se me ocurre a bote pronto, que, si no se encuentra otra forma mejor de hacerlo, tal vez podría cambiarse la siguiente instrucción a algo parecido a:
Código Delphi
[-]
if temp.Count > 0 then
temp.Add(' $$ ' + inet_ntoa(pptr^[i]^))
else
temp.Add(inet_ntoa(pptr^[i]^));
De ese modo, en la cadena que obtuvieras como resultado, caso de haber más de una dirección IP obtendrías algo así como resultado:
Código:
123.45.32.45 $$ 234.42.23.12
Acaso esos signos "dólar" pudieran servirte luego para averiguar, primero, si hay más de una IP en la cadena "resultado" y, en ese caso, conseguir todas las que hubiera, con ayuda de funciones como "Pos" y "Copy", por ejemplo.