Ver Mensaje Individual
  #2  
Antiguo 24-05-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Reputación: 26
seoane Va por buen camino
Un PChar es un puntero a un caracter, se utilizan para manejar cadenas terminadas en caracter nulo como en C. El "truco" esta es mover el puntero por la cadena, adelante o atras segun convenga.

Por ejemplo:
Código Delphi [-]
var
  P: PChar;
  Aux: PChar;
  i: integer;
  s: string;
begin
  GetMem(P, 256);
  try
    FillChar(P^,256,0);
    StrCopy(P, 'Hola mundo');
    // Recorremos el texto sabiendo su longitud
    Aux:= P;
    s:= '';
    for i:= 1 to StrLen(P) do
    begin
      s:= s + Aux^;
      inc(Aux);
    end;
    ShowMessage(s);
    // Recorremos el texto hasta encontrar el caracter nulo
    Aux:= P;
    s:= '';
    while Aux^ <> #0 do
    begin
      s:= s + Aux^;
      inc(Aux);
    end;
    ShowMessage(s);
    // En cualquiera de los 2 casos Aux queda apuntando
    // al caracter nulo
    inc(Aux);
    // Ahora Aux esta apuntando al siguiente caracter si lo hubiese.
  finally
    FreeMem(P);
  end;
end;

Es solo un ejemplo de como recorrer la cadena, para copiar el contenido de un PChar en un String hay metodos mas eficaces:
Código Delphi [-]
var
  P: PChar;
  Aux: PChar;
  s: string;
begin
  GetMem(P, 256);
  try
    FillChar(P^,256,0);
    StrCopy(P, 'Hola mundo');
    // Copaimos el texto en S
    S:= String(P);
    // Colocamos el puntero Aux apuntando al caracter siguiente al nulo
    Aux:= P + StrLen(P) + 1;
    ShowMessage(S);
  finally
    FreeMem(P);
  end;
end;

Y algo parecido a lo que quieres hacer tu, metemos en una misma porcion de memoria un texto y un integer, y luego los volvemos a separar.
Código Delphi [-]
var
  P: PChar;
  Aux: PChar;
  s: string;
  i,j: Integer;
begin
  GetMem(P, 256);
  try
    // Aqui metemos en un mismo buffer un texto y a continuacion un integer
    FillChar(P^,256,0);
    StrCopy(P, 'Hola mundo');
    i:= 1234;
    // Hacemos que Aux apunte al carater siguiente al nulo
    Aux:= P + StrLen(P) + 1;
    move(i,Aux^,sizeof(i));

    // Ahora sacamos de nuevo la informacion
    S:= String(P);
    Aux:= P + StrLen(P) + 1;
    move(Aux^,j,sizeof(j));
    ShowMessage(S + ',' + IntTostr(j));
  finally
    FreeMem(P);
  end;
end;

Son varios ejemplos de como tratar con PChar, revisa tanbien la ayuda de delphi, encontraras un monton de funciones para tratar con este tipo de cadenas de texto. Y si no encuentras lo que buscas vuelve por aqui haber que podemos hacer.
Responder Con Cita