Ir ao conteúdo
  • Cadastre-se

Como usar funções de um programa em uma DLL.


noob

Posts recomendados

Bom eu estou fazendo uma DLL para acrescentar algumas coisas a um programa, inicialmente eu começei a faze-la em Assembly, consegui fazer quase tudo que queria perfeitamente, mais asm não e uma linguagem muito pratica de se trabalhar, intão resolvi fazer em C++ e me deparei com um grande problema, como usar as funções do programa na dll, por exemplo em assembly quando eu queria mandar uma mensagem especial para o usuario eu fazia algo + ou - assim:

.Data

Offset DD 000000H <- Offser da função que manda a mensagem(ex: Send(Mensagem)

Mensagem DB "Como vai?",0

.Code

Lea Eax,Mensagem

Push Eax

Call Offset

Mais em C++ eu pensei,pensei e não descobri como fazer, se alguem puder me dar uma luz ficaria grato.

Link para o comentário
Compartilhar em outros sites

Eu quero e fazer uma nova DLL em C++, so que não sei como fazer para usar uma função do executavel dentro da DLL, o que normalmente as pessoas querem e que o executavel execute uma função da dll eu quero o contrario, mais não sei como fazer em C++ so em assembly:(

Link para o comentário
Compartilhar em outros sites

Estou usando o visual c++ 6.0, uso o DevC++ para fazer coisas mais simples, pois e mais leve e simples de usar, se você puder postar um exemplo de como fazer um callback apontando para um determinado offset do executavel(o da função X) ficaria grato, ou um tuturial direcionado, eu procurei no google por callback mais não achei nada que realmente explicasse o que eu quero, eu ate consegui fazer isso usando trechos de assembly, mais bugava em algumas coisas.

Link para o comentário
Compartilhar em outros sites

Bom eu conseguir fazer a parada, mais não estou conseguindo apontar para o offset do programa, so consegui para outra função como fiz abaixo:

void callfunction()

{

printf("OIEEEEEEEEE\n");

system("pause");

}

int main()

{

void (*callback)();

callback = &callfunction;

callback();

return 0;

}

Quando eu troco o callback = &callfunction; para callback = 0x000000; para poder apontar o offset ta erro, falando que não pode converter unsigened long para void, to aqui na luta se alguem puder ajudar seria uma mão na roda, as duas até ^^.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Com o Dev-C++ é fácil porque ele ja tem os templates para criar uma DLL, o Visual C++ 2005 Express é fresco e não vai deixar você criar uma DLL nativa, então um passo a passo com o Dev-C++:

1) Crie um novo projeto, procure por um projeto do tipo DLL e troque a linguagem de C++ para C (tambem da para fazer com C++, mas com C++ ele vai criar uma classe e encher a DLL de porcaria que você teria que ficar removendo, o exemplo aqui é mais simples);

2) Por padrão ele exibe um fonte com a função DllMain (necessária para o funcionamento da DLL) e uma função HelloWorld de exemplo, repare na delcaração dessa função, adicione uma variavel global e troque o HelloWorld por outras duas:


void (*Send)(char*);
DLLIMPORT void MandaFuncao(void (*offset)(char*))
{
Send = offset;
}
DLLIMPORT void ChamaFuncao()
{
Send("HelloWorld");
}

3) No arquivo "dll.h" tambem existe a declaração do HelloWorld, e que precisa der alterada, esse .h sera usado depois para chamar essa DLL.

4) Para chamar a função crie um novo projeto, coloque um #include com o .h anterior, chame a função MandaFuncao com o endereço da função Send (da mesma forma que você fez com o callfunction, mas a Send recebe um parâmetro do tipo char*) e depois chame a função ChamaFuncao.

ps: Eu não tenho como testar aqui, não posso garantir que isso funcione, mas o basico é isso...

Link para o comentário
Compartilhar em outros sites

valeu ai, vou testar aqui, eu irei chamar a dll em um programa previamente compilado que eu não tenho o source, mais isso eu sei como fazer, depois posto aqui o que deu.

EDIT: Testei aqui e deu + ou - o mesmo erro que antes quando eu coloco o offset:

13 invalid conversion from `int' to `void (*)(char*)'

13 initializing argument 1 of `void CallFunction(void (*)(char*))'

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...