Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Clonar un array que viene desde un puntero (https://www.clubdelphi.com/foros/showthread.php?t=82651)

kotai 28-03-2013 12:53:46

Clonar un array que viene desde un puntero
 
Hola.
Tengo un puntero a un array y quiero hacer una copia de ese array, pero no consigo saber como hacerlo.
Os pongo el ejemplo:

Código:

  PKeyStateArr = ^TKeyStateArr;
  TKeyStateArr = array[0..65000] of UInt8;

var
    Teclado : PKeyStateArr;
    TecladoAntes : TKeyStateArr;
begin
    // antes de actualizar el estado de las teclas
    // hacemos una copia de como estaba antes el teclado
 
    // ESTO ES LO QUE NO SE COMO HACER,
    // PONGO VARIOS EJEMPLOS QUE NO FUNCIONAN
    // Teclado YA VIENE CON UN VALOR INICIALIZADO
    TecladoAntes := Teclado^;
    TecladoAntes := Copy(TKeyStateArr(Teclado), 1, Length(TKeyStateArr));
    TecladoAntes := PKeyStateArr(Teclado)^;

    // actualizamos el array con las teclas pulsadas
    Teclado := PKeyStateArr(SDL_GetKeyState(nil));

La explicación es sencilla, con SDL_GetKeyState(nil) obtenemos un puntero a un array que dice el estado de todas las teclas y yo quiero hacer una copia de ese estado para luego poder comprobar si la tecla se acaba de pulsar o ya estaba pulsada.
si Teclado y TecladoAntes los hago de tipo PKeyStateArr y hago una asignación TecladoAntes := Teclado no me sirve porque cuando actualizo el Teclado también se actualiza TecladoAntes

¿ Como puedo copiar el array sin tener que hacer un for i=1 to length(TKeyStateArr) : TecladoAntes[i] := Teclado[i] ?

Saludos.

kotai 28-03-2013 13:28:46

Bueno, no he dicho nada, la primera solución que había puesto si que era buena:

Código:

TecaldoAntest := Teclado^
El problema estaba en el tamaño del array que estaba en 65000 y la función SDL_GetKeyState rellena menos datos (64063)

Saludos

Al González 29-03-2013 00:29:28

Según esta documentación, dicha función recibe un parámetro por referencia en el cual guarda el tamaño de la matriz. Así que sólo deberías copiar la cantidad de elementos que indica ese parámetro tras ser ejecutada la función.

Cita:

Uint8 *SDL_GetKeyState(int *numkeys);

Description

Gets a snapshot of the current keyboard state. The current state is returned as a pointer to an array. The size of this array is stored in numkeys.


La franja horaria es GMT +2. Ahora son las 22:41:00.

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