C To Delphi - Help

18/08/2008

3

Amigos, quem puder me ajudar a converter

#define CONT_STICK1X(1<<18)
define CONT_STICK1Y(1<<19)
define CONT_STICK2X(1<<20)
define CONT_STICK2Y(1<<21)



typedef struct
{
u16joyButtons;
u8rightTrig;
u8leftTrig;
u8stick1X;
u8stick1Y;
u8stick2X;
u8stick2Y;
} CONTROLLER;


acho que seria assim.

CONST CONT_STICK1X18
CONST CONT_STICK1Y19
CONST CONT_STICK2X20
CONST CONT_STICK2Y21[/code]


type CONTROLLER

u16joyButtons;
u8rightTrig;
u8leftTrig;
u8stick1X;
u8stick1Y;
u8stick2X;
u8stick2Y;
CONTROLLER

oBRIGADO


Responder

Posts

19/08/2008

Sremulador

só complementando

typedef unsigned __int8  u8;
typedef unsigned __int16 u16;
typedef unsigned __int32 u32;
typedef unsigned __int64 u64;



Responder

19/08/2008

Nildo

#define CONT_STICK1X         (1<<18)
define CONT_STICK1Y         (1<<19)
define CONT_STICK2X         (1<<20)
define CONT_STICK2Y         (1<<21)


(1<<18) é a mesma coisa que (1 shl 18)
SLH = Shift Left.

typedef struct
{
   u16      joyButtons;
   u8      rightTrig;
   u8      leftTrig;
   u8      stick1X;
   u8      stick1Y;
   u8      stick2X;
   u8      stick2Y;
} CONTROLLER;


Isso seria a mesma coisa que

type CONTROLLER = record
   joyButtons: Word;
   rightTrig: byte;
   leftTrig: byte;
   stick1X: byte;
   stick1Y: byte;
   stick2X: byte;
   stick2Y: byte;
end;


Digo isso porque u8 quer dizer Unsigned 8 bits.
Unsigned 8 bits é o mesmo que o tipo BYTE no delphi.

Mesma coisa para u16: unsigned 16 bits.
No Delphi é a mesma coisa que WORD.

Unsigned quer dizer que não tem sinal. Então isso tudo deve resolver.

Espero ter ajudado, boa sorte


Responder

20/08/2008

Sremulador

Não abusando...

eu defini da seguinte forma.

type CONTROLLER = record
    joyButtons: word;
    rightTrig: byte;
    leftTrig: byte;
    stick1X: byte;
    stick1Y: byte;
    stick2X: byte;
    stick2Y: byte;
  end;


void GetControllerDevice(CONTROLLER *controller, u32 port);



Responder

20/08/2008

Nildo

void GetControllerDevice(CONTROLLER *controller, u32 port);


Esse * quer dizer que a funćão está pedindo um ponteiro. Então voce cria um tipo, logo após o Record assim:

PController = ^Controller;

e declara a fun&263;ão assim:

void GetControllerDevice(controller: PControler; port: Integer);


uma vez que u32 é um integer, que também tem 32 bits. Na hora de chamar a fun&263;ão, você declara normal o Controller, atribui as variaveis e dai chama com um @ na frente da variavel, pra indicar que você está passando o ponteiro que é isso que a fun&263;ão pede


Responder

21/08/2008

Sremulador

amigo nildo, obrigado pela ajuda, estou batendo cabeça com esses códigos, mas não entender de C e F, tenho que fazer um curso disso, mas continuando se puder me ajudar e claro, estou fazendo uma dll onde e um plugin, então tenho que retornar a posição do joystick, na unit plugins a entrada da DLL esta assim

typedef void  (FASTCALL *_padReadJoy)(u8 *keymask, u32 port);


só que não sei o que e keymask, já que não achei nenhuma referencia...

typedef int   (FASTCALL *_padOpen)(void *demulInfo);
typedef void  (FASTCALL *_padClose)();
typedef void  (FASTCALL *_padReset)();
typedef void  (FASTCALL *_padConfigure)();
typedef void  (FASTCALL *_padAbout)();
typedef u32   (FASTCALL *_padJoyCaps)(u32 port);
typedef void  (FASTCALL *_padReadJoy)(u8 *keymask, u32 port);
typedef void  (FASTCALL *_padReadJamma)(u32 *keymask);
typedef u32   (FASTCALL *_padKeyCaps)(u32 port);
typedef void  (FASTCALL *_padReadKey)(u8 *keymask, u32 port);
typedef void  (FASTCALL *_padSendVibration)(VIBRATION *vibration, u32 port);
typedef void  (FASTCALL *_padSendWaveform)(WAVEFORM *waveform, u32 port);
typedef void  (FASTCALL *_padSendAutostop)(AUTOSTOP *autostop, u32 port);



void FASTCALL padReadJoy(u8 *keymask, u32 port)
{
GetControllerDevice((CONTROLLER*)keymask, port);


mas não entendi, onde declarar a variavel com o @

meu código esta assim até agora...

const
  CONT_STICK1X = (1 shl 18);
  CONT_STICK1Y = (1 shl 19);
  CONT_STICK2X = (1 shl 20);
  CONT_STICK2Y = (1 shl 21);
  CONT_RIGHT_TRIG = (1 shl 16);
  CONT_LEFT_TRIG = (1 shl 17);

  PLUGIN_TYPE_GPU = 0;
  PLUGIN_TYPE_SPU = 1;
  PLUGIN_TYPE_GDR = 2;
  PLUGIN_TYPE_PAD = 3;

type CONTROLLER = record
    joyButtons: word;
    rightTrig: byte;
    leftTrig: byte;
    stick1X: byte;
    stick1Y: byte;
    stick2X: byte;
    stick2Y: byte;
  end;

  PController = ^Controller;


procedure padReadJoy(CONTROL: PController; port: integer);
begin
  port:=0;
  CONTROL.joyButtons := 3;
  CONTROL.stick1X := 120;
  CONTROL.stick1Y := 120;
end;


mais uma vez obrigado


Responder

21/08/2008

Nildo

Bom, para este exemplo:

typedef void  (FASTCALL *_padReadJoy)(u8 *keymask, u32 port);


você está definindo uma procedure, com o ´calling conversion´ FASTCALL. O nome da procedure é _padReadJoy, keymask é um ponteiro para um unsigned integer de 8 bits e o port é um inteiro de 32 bits.

A declaração deve ficar assim:

type
   _padReadJoy = procedure(keymasp: PByte; port: Integer); FASTCALL;


Mesma coisa pros de baixo aí.

Bom, eu disse sobre o @ é que assim, vamos supor que vc vai chamar essa _padReadJoy, como o primeiro parametro é um ponteiro pra um byte, vc tem que chamar ela passando @variavel_do_byte pra que receba o ponteiro. Foi isso que quis dizer


Responder

21/08/2008

Sremulador

obrigado pela força, mas com eu disse eu quero e saber na realidade onde envio os parametros, atraves do plogin

já que ele declara...

Plugins.h

typedef void  (FASTCALL *_padReadJoy)(u8 *keymask, u32 port);

//methods

_padReadJoy padReadJoy;




bem acho que tudo começa ae...

padDemul.c

void FASTCALL padReadJoy(u8 *keymask, u32 port)
{
GetControllerDevice((CONTROLLER*)keymask, port);
}



Bem pelo que eu entendi at agora como eu mando o comando p *keymask, na port eu coloco 0, pois e a entrada entre 0 e 1.

padReadJoy(u8 *keymask, u32 port)

valeu...


Responder

24/08/2008

Sremulador

help...


Responder

23/02/2011

Rubem Rocha

O mais importante não foi mencionado. De onde foram tiradas essas definições????
Responder