Ver Mensaje Individual
  #7  
Antiguo 18-09-2018
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.734
Reputación: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Creo que te sobra un ^.

Código Delphi [-]
var
  CardInformation : WideString;
  CardInformation2 : ^WideString; // Puntero a un WideString
begin
  try
    try
      // 1) Reservo 255x2 bytes de memoria a partir de la pisición de CartInformation2
      GetMem(CardInformation2, 255 * 2);
      // 2) Le paso el contenido de CartInformatio2. Es una posición de memoria. NO LE PASO EL CONTENIDO DE LO QUE HAY EN LA POSICION DE MEMORIA
      ReadCardResult:= MyCompActX.ReadInformation(CardInformation2, 20, 20, 1, 'INGRESE NUM...');
      3) // TypeCast para convertir la información recibida que se encuentra a partir de la posicion de memoria CartInformatio2 hasta que encuentre un \n
      CardInformation := WideChar(CardInformation2);
    finally
      // 4) Libreo memoria
      FreeMem(CardInformation2);
    end;

Código:
1) Reservo Memoria
GetMem me devuelve que en la posición 10000 hay un bloque continuo de 255x2 bytes reservados para mi
CartInformatio2 = 10000
CartInformatio2^ = 'B_A%S(U R-A.......'
En la posición de memoria 10000 hay basura (restos de cosas que el ordenador haya procesado)

2) Le paso la posición al componente ActiveX
Esta función rellena a partir de la posición recibida los datos que quiere devolver, terminando con un \n
CartInformatio2 = 10000
CartInformatio2^ = '092261779...\n'

3) Convierto la información recibida en algo mas ameno para trabajar en Delphi

4) Libero memoria
El bloque de 255x2 bytes queda libre para que otro proceso lo pueda utilizar.
Lo que haya en la posicion 10000 en adelante se considera basura para el próximo proceso que utilice.
Responder Con Cita