Eu queria ver se alguem sabe como eu coloco um trecho de um programa C/C++ para rodar dentro de um programa em JAVA.
Pois eu faço um trecho do código em assembler, dentro de uma função em C/C++, e esse trecho eu queria usa em java.
Alguem sabe como fazer?
C/C++ com JAVA
7 Respostas
Maneira 1:
a) Converta esse código em uma DLL.
b) A seguir, teste essa DLL com alguma coisa, como o VB 6 usando “DECLARE FUNCTION”, ou outro programa em C mesmo. Veja que essa DLL deve ter interface bastante simples, ou seja, não podemos passar objetos C++ ou outras coisas mais complicadas.
c) Agora, use o pacote JAWIN ( http://jawinproject.sourceforge.net/ ) para chamar essa DLL.
Maneira 2:
a) Converta esse código em uma DLL JNI. Para mais detalhes, o livro do arquiteto do JNI, Sheng Liang ( Java Native Interface: Programmer’s Guide and Specification ) está disponível no site da Sun:
ftp://ftp.javasoft.com/docs/specs/jni.pdf
Isso executa mais rápido mas é mais sujeito a erros.
De qualquer maneira, pode até ser que o que você faz em Assembler já esteja disponível no Java - há tantas bibliotecas que talvez alguma faça o que você quer, sem ter de traduzir o seu código.
O que você faz em Assembler?
Bom na verdade eu quero fazer um rograma em java que fike somente grando log do q ocorre no windows(por exemplo: abriu o winamp, o programa vai la e grava em arquivo…) existe alguma biblioteca em java q utiliza serviços da bios?
Você só quer logar se os programas foram iniciados, ou você precisa fazer alguma coisa se o programa X foi iniciado?
Para o primeiro caso acho que dá para setar alguma LocalPolicy e verificar as coisas com o EventViewer. Existem alguns programas que lêem o EventViewer e podem jogar esse relatório em arquivos, que você pode ler depois.
É só logar quando o programa (.exe) é iniciado e quando ele termina. Vo da umas pesquisada nisso que vc falou valeu.
Ah e outra, a dll q vc falo pra fazer,o java aceita código só em C? ou só C++? ou os 2?
Se você fizer as coisas direito, tanto faz se é C ou C++. Só tem de tomar um pouco de cuidado.
Pq assim, em C (no turbo C) eu consigo usar o asm por exemplo:
asm{
MOV AX,0x200
MOV DL,7
int 0x21
}
Agora em C++ no devC++ da erro no mesmo programa, por isso perguntei se há alguma diferença.