Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   struct y record (https://www.clubdelphi.com/foros/showthread.php?t=46655)

c4_esp_VR 06-08-2007 11:52:31

struct y record
 
Hola amigos:

Soy nuevo en el foro, así que espero que me perdonen en el caso de cometer algún error como postear donde no se debe...:p:p:p

LLevo programando 6 meses en Delphi7 y la verdad es que por el momento es el mejor compilador que he programado hasta ahora, pero tiene la desventaja de que en muchas ocasiones hay que pasar código de Visual C++ a Delphi y me acao de encontrar con una peculiaridad y es la siguiente:

C++ permite definir estructuras con el comando struct, al igual que Delphi lo permite con el comando record, así que para pasar C++ a Delphi no hay más que reordenar dicho código...

Visual C++:

struct EFFECTS_NODE
{
LPDIRECTINPUTEFFECT pDIEffect;
DWORD dwPlayRepeatCount;
EFFECTE_NODE* pNext;
}

Delphi7:

type
TEFFECTS_NODE = record
pDIEffect : IDIRECTINPUTEFFECT;
dwPlayRepeatCount : Cardinal;
pNext : ^TEFFECTS_NODE
end;

Resulta que Visual C++ puede definir en el interior de struct una variable puntero dentro de si mismo, pero Delphi7 no deja hacerlo dando el siguiente error:

Type TEFFECTS_NODE is not yet completely defined

No sé si definiedo antes la estructura en algún sitio y luego definiendola no me dará error...seguro que a vosotros se os ocurre alguna forma...

El código no es más que implementar DirectInput9 para Delphi para crear un ForceFeedBack.

Espero que la explicación sea correcta...no la quiro fastidiar en mi primer post :D:D:D:D

Un saludete y gracias

__________________________________________________________________________________________
http://www.muchotrasto.com

seoane 06-08-2007 12:22:32

En pascal, y por lo tanto en delphi, se resuelve ese problema de la siguiente manera:
Código:

type
  PEFFECTS_NODE = ^TEFFECTS_NODE;
  TEFFECTS_NODE = record
    pDIEffect: IDIRECTINPUTEFFECT;
    dwPlayRepeatCount : Cardinal;
    pNext : PEFFECTS_NODE;
  end;


c4_esp_VR 06-08-2007 16:21:34

Gracias seoane, me imaginaba que se resolvería de dicha forma, pues es una lista que se recorre a si misma, bueno ya os comentaré si ha dado resultado tu respuesta ya que aún me estoy dando cabezazos con el programita, aunque desde luego así ya no me da error de compilación.

c4_esp_VR 07-08-2007 18:35:47

Efectivamente después de mucho pelear con la lista y con los punteros en Delphi he conseguido que no me diese error y programarlo, gracias por tu gran respuesta seoane, por cierto un tanto diferente esta forma de hacer listas enlazadas en Delphi :D:D:D:D:D:D.

Un saludete a los foreros.


La franja horaria es GMT +2. Ahora son las 12:25:46.

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