Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   Problema con el manejo de punteros? (https://www.clubdelphi.com/foros/showthread.php?t=6456)

chavetaz 09-01-2004 00:59:02

Problema con el manejo de punteros?
 
Hola gente:
Estoy haciendo una rutina para manejar cookies pero estoy haciendo algo mal, del debuger no me dice en que linea esta el error, pero me presenta la ventana de debug del cpu con la linea erronea en assembler....

si alguno le da una miradita al codigo por ahi me puede decir donde podria estar el error, o alguna pista (se me hace que tiene que ver con el puntero Pinfo y el GetMem/FreeMen)

:confused:
var
info: INTERNET_CACHE_ENTRY_INFOA;
Pinfo: PInternetCacheEntryInfoA;
Buffer: DWORD;
Handle: THandle;
esEsta: string;
begin
esEsta:='';
Buffer := 0;
Pinfo:=@info;
//primera vez obtengo el tamaño del buffer correcto
Handle := FindFirstUrlCacheEntry(nil, info, Buffer);
if (Handle=0) and (GetLastError()= ERROR_INSUFFICIENT_BUFFER) then
begin
GetMem(Pinfo,Buffer);
Handle := FindFirstUrlCacheEntry(nil, info, Buffer);
if Handle <> 0 then //exito
begin
repeat //bucle
if (info.CacheEntryType = NORMAL_CACHE_ENTRY) then
begin
if StrPos(info.lpszSourceUrlName,PChar(CmbPattern.Text)) <> nil then
begin
esEsta:= info.lpszSourceUrlName;
break;
end;
end;
FreeMem(Pinfo, Buffer); // se borra el buffer

Buffer := 0;
FindNextUrlCacheEntry(Handle, info, Buffer);
GetMem(Pinfo, Buffer);
until FindNextUrlCacheEntry(Handle, info, Buffer) = False;
//fin bucle
FindCloseUrlCache(Handle);
end;
end;
end;
:confused:

una vez mas les agradezco mucho su ayuda.
Saludos!

marto 09-01-2004 09:55:57

No sé por qué te está dando ese error, pero me muero de curiosidad por saber por qué necesitas llegar a tan bajo nivel para trabajar con cookies. ¿No puedes hacerlo con TWebRequest.CookieFields?

marto 09-01-2004 09:59:24

Me respondo a mi mismo.... estás trabajando en el lado cliente, perdona, pero acostumbrado a trabajar con cgi's no pense mucho antes de contestar, suert :)

delphi.com.ar 09-01-2004 15:15:12

A simple vista te puedo decir que estas asignando memoria al puntero Pinfo, pero luego no lo usas para nada. Sigues usando info...

Saludos!

chavetaz 09-01-2004 15:35:18

no entiendo!
Pinfo no es un puntero a info ?
eso es lo que trate de hacer...

porque a GetMen le tengo que pasar un puntero, pero info es una estructura, trate @info pero no funciono, asi que "invente" Pinfo...
si el error es ese, como seria la forma correcta de enviar el puntero de info como parametro de GetMen?

Gracias

PD: Hay alguna forma de enviar el codigo tabulado?

delphi.com.ar 09-01-2004 16:07:14

No me había percatado de la línea:
Código:

Pinfo:=@info;
, pero de todos modos, PInfo deja de ser un puntero a Info en la línea
Código:

GetMem(Pinfo,Buffer);
.

Saludos!

Lepe 12-01-2004 06:59:07

Cita:

PD: Hay alguna forma de enviar el codigo tabulado?
siiiiiiiiiii, tienes un icono que se llama wrap code tag (el simbolo de la almohadilla del teclado) no veas lo que se agradece un codigo identado ;)

Amilius 25-01-2004 22:50:29

¿Donde está el famoso ícono "wrap code tag"?

Test:

procedure TFMain.CmbArtefactoChange(Sender: TObject);
var id_nuevo:byte;
begin
id_nuevo:=CmbArtefacto.ItemIndex;
with Archivo.Artefactos[CmbComercio.itemindex][posicion] do
begin
id:=id_nuevo;
modificador:=DefinirModificador(id_nuevo,posicion);
end;
IconoArma.repaint;
PaintBox.repaint;
end;

Al editarlo lo veo identado, pero no así en modo "lectura"..

Amilius 25-01-2004 23:35:09

Cita:

Empezado por delphi.com.ar
A simple vista te puedo decir que estas asignando memoria al puntero Pinfo, pero luego no lo usas para nada. Sigues usando info...

Saludos!

Lo que pasa es que GetMem le vale un comino que Pinfo apunte a Info o a otra cosa, Getmem usa a Pinfo como variable, como un lugar para guardar algo, no le importa el valor que tenía almacenado.

Si quieres "agrandar" a Info tendrás que crear otro buffer, copiar los datos de Info al nuevo buffer (si lo necesitas) y utilizar el nuevo buffer y olvidarte de Info, por que como dijiste es una estructura (que supongo que NO la creaste dinámicamente (reservando memoria con otro getmem)) y esas no son redimensionables.

P.D. Getmem reserva memoria, no "redimensiona" estructuras referenciadas por un puntero.


La franja horaria es GMT +2. Ahora son las 16:30:12.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi