Delphi - como convierto el contenido de un puntero a string

 
Vista:

como convierto el contenido de un puntero a string

Publicado por Gustavo (2 intervenciones) el 23/12/2002 08:49:33
no me interesa lo que hay en la dirección de memoria apuntada, me interesa la dirección de memoria en sí, como tengo que hacer si quiero, por ejemplo, mostrarla por pantalla ??

Todo esto viene a raiz de un intento fallido de utilizar la llamada a la API "sendmessage" enviando el mensaje "wm_settext". La función pide como parametros el Handle de ventana, el mensaje, y dos parametros adicionales que en delphi, deben ser enteros, pero cuando utilizo la misma llamada en otro "lenguaje" (hablo de VB) el último parametro puede ser del tipo ANY y yo la mando ahí el STRING que quiero y listo (que supongo que lo que se envia en realidad es, de alguna forma, un puntero).
Bueno, como sea, en delphi no puedo enviar un puntero, así que supuse que lo que me pide como integer, es la dirección de memoria, pero en lugar de en hexa, en decimal, entonces... como carajo convierto una dirección contenida en un puntero a un valor decimal y se lo paso a la llamada ???

Estoy delirando mucho ??? Avisen cualquier cosa....
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:como convierto el contenido de un puntero a str

Publicado por Domingo Seoane (65 intervenciones) el 24/12/2002 00:16:10
Creo que lo que quieres hacer es esto, cambiarle el texto a una ventana. Pues es asi de sencillo, no te lies con hexadecimal y decimal un integer es un integer no hay integers hexadecimales y decimales. Simplemente tienes que decirle al compilador que tome el puntero como si fuera un integer para que el sepa como manejarlo. En el ejemplo de abajo le cambio el texto a una ventana por el contenido de la variable Texto que es de tipo string.

var
Texto: string;
begin
Texto:= 'Hola';
sendmessage(handle,WM_SETTEXT,0,lPARAM(PChar(Texto)));
end;

Tambien te puede ser util este otro ejemplo donde lo que hago es leer el texto de una ventana, esto puede ser muy util por ejemplo para leer los edits de otras aplicaciones incluso los que solo muestran asteriscos.

var
P: PChar;
l: integer;
Texto: string;
begin
l:= sendmessage(handle,WM_GETTEXTLENGTH ,0,0)+1;
Getmem(P,l);
try
sendmessage(handle,WM_GETTEXT,l,lPARAM(P));
Texto:= StrPas(P);
finally
Freemem(P);
end;
end;

Espero que esto te aclare un poco las cosas.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar