C To Delphi - Help
Amigos, quem puder me ajudar a converter
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
#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
Curtidas 0
Respostas
Sremulador
18/08/2008
só complementando
typedef unsigned __int8 u8; typedef unsigned __int16 u16; typedef unsigned __int32 u32; typedef unsigned __int64 u64;
GOSTEI 0
Nildo
18/08/2008
#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
GOSTEI 0
Sremulador
18/08/2008
Não abusando...
eu defini da seguinte forma.
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);
GOSTEI 0
Nildo
18/08/2008
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
GOSTEI 0
Sremulador
18/08/2008
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
só que não sei o que e keymask, já que não achei nenhuma referencia...
mas não entendi, onde declarar a variavel com o @
meu código esta assim até agora...
mais uma vez obrigado
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
GOSTEI 0
Nildo
18/08/2008
Bom, para este exemplo:
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:
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
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
GOSTEI 0
Sremulador
18/08/2008
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
bem acho que tudo começa ae...
padDemul.c
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...
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...
GOSTEI 0
Sremulador
18/08/2008
help...
GOSTEI 0
Rubem Rocha
18/08/2008
O mais importante não foi mencionado. De onde foram tiradas essas definições????
GOSTEI 0