C To Delphi - Help
18/08/2008
0
#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
Sremulador
Posts
19/08/2008
Sremulador
typedef unsigned __int8 u8; typedef unsigned __int16 u16; typedef unsigned __int32 u32; typedef unsigned __int64 u64;
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
20/08/2008
Sremulador
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);
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
21/08/2008
Sremulador
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
21/08/2008
Nildo
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
21/08/2008
Sremulador
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...
23/02/2011
Rubem Rocha
Clique aqui para fazer login e interagir na Comunidade :)