Jump to content

Converter função em C++ p/ Delphi


iBrendo-
 Share

Recommended Posts

Pessoal tenho um função que cham aMUDA SUA CAMERA - 1a e 3a pessoa

no jogo, mais está em c++ como não tenho conhecimento nenhum de c++ não consegui converte, pois estou com duvida, alguém pode me ajudar olha:

void TerceiraPessoaOn ( bool bActive )
{
   DWORD    pCameraManager    = 0xAFCFB8; //Pointer da função, está desatualizado irei att.
   DWORD    fn          = 0x53F720; //Address da função, está desatualizado irei att.
   int    mode        = bActive?4:bActive;    

   (*(int (__thiscall*)(void*, int, float))fn)(*(LPVOID*)pCameraManager, mode, 0.0);    

Está em c++

Preciso Converte para delphi, depois que consegui converte irei atualizar, comecei converter, para o delphi:

procedure TerceiraPessoaOn(bActive: BOOL);// ta certo aqui
const
pCameraManager = $AFCFB8;// Ta certo aqui
fn   :DWORD = $53F720;// ta certo aqui
int    mode        = bActive?4:bActive; // Essa linha não entendi, como posso convertela para o delphi.
(*(int (__thiscall*)(void*, int, float))fn)(*(LPVOID*)pCameraManager, mode, 0.0);// Essa linha também não entendi.
end;

Alguém pode me ajudar converte para o delphi por favor, curti muito a função.

Edited by thoga31
Formatação do tópico, remoção da imagem desnecessária, remoção de link
Link to comment
Share on other sites

int mode = bActive?4:bActive;

Pode ser escrito assim:

int mode;

if (bActive) {
   mode = 4;
} else {
   mode = bActive;
}

Na outra linha estás a chamar uma função a partir de um endereço.

Eu não sei o que pretendes fazer exactamente, mas converter o código "à letra" não funciona. Tens que considerar que o espaço de endereçamento do teu programa não vai corresponder ao espaço de endereçamento do outro programa, logo as coisas nunca vão bater certo.

  • Vote 1

“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Link to comment
Share on other sites

Primeiros apontamentos:

  • Não há tópicos mais urgentes que outros no P@P, pelo que removi essa indicação no título;
  • Deve-se colocar o código dentro das tags CODE;
  • Imagens e conteúdos em geral que não são necessários ao entendimento do problema exposto devem ser evitados para não gerar entropia.

Posto isto, o código que pretendes converter... Algumas notas:

  • Não existe o tipo DWord em Pascal ou Delphi (vulgo Pascal). Este tipo é um número inteiro sem sinal (unsigned int) de 32 bits, ou seja, 4 bytes. O equivalente em Pascal é LongWord;
  • Não existe o tipo BOOL mas sim Boolean;

Os meus conhecimentos em C++ são bastante escassos, pelo que não entendo a segunda linha de código. Mas, segundo o @KTachyon, está-se a tentar aceder a uma função através de um endereço. De forma genérica, a chamada de uma função em Pascal dá-se da seguinte forma:

program exemplo;

// Deve-se criar um tipo de dados com o protótipo da função em causa:
type TFunction_IntInt = function (n : integer) : integer;

// Esta é a função que vamos referenciar:
function duplica(n : integer) : integer;
begin
  duplica := n*2;
end;

// Esta é uma função que aplica "fn" ao argumento "arg":
function aplica(fn : TFunction_IntInt; arg : integer) : integer;
begin
  aplica := fn(arg);  // usamos a função "fn" e aplicamo-la ao argumento "arg"
end;

begin
  aplica(@duplica, 2);  // referenciamos a função a aplicar, "duplica", através do operador @, que devolve o endereço em memória de um objecto.
end;
  • Vote 1

Knowledge is free!

Link to comment
Share on other sites

Fui informado pelo @CrominhO que o tipo de dados DWord existe de facto, mas em Delphi. Uma vez que não uso Delphi e me oriento pelas reference guides do Free Pascal, este tipo de dados era meu desconhecido. Obrigado pela correcção, @CrominhO. Já rasurei esta informação errónea.

Knowledge is free!

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.