« Pegar IP da maquina local com Java | Home | Aredondamento de números em J2ME »
Acesso nativo com Java e Delphi (JNI)
de raydacosta | Segunda, 24 de Agosto de 2009

Demorou mas apareceu…
Tive que desenvolver uma aplicação jav apara consumir uma DLL em Delphi, bicho que robada.
mas com a ajuda do camaradas de C/C++ fizemos a gambi. Hehheeheh.
Construimos uma classe wrapper em C/C++ que consome a DLL em Delphi e assim a coisa foi redonda.
Até existe um procedimento para acessar a dll Delphi, mas muito enrrolado, segue abaixo.
java <---> c/c++ <----> delphi via JNI
Como implementar um código Java acessando uma DLL em Delphi.
Para c/c++ este procedimento via JNI é bem comum, mas com Delphi nunca tinha feito. O que muda mesmo são as APIs de geração dos Stubs que mudaram, resumo, nao vem com o código nativo do Java.
Baixar
http://www.pacifier.com/~mmead/jni/delphi/JEDI/PAS/JNI.pas
É muito importate este fonte, ele é uma caixa preta, ele que faz a interfacce com a Java.
fonte para vc dar uma olhada: http://www.pacifier.com/~mmead/jni/delphi/JEDI/DOCS/src/jni_pas.html
http://www.pacifier.com/~mmead/jni/delphi/files/jni_pas.zip
http://www.pacifier.com/~mmead/jni/delphi/JEDI/PAS/JNI_MD.INC
Gerador de Stub
http://www.pacifier.com/~mmead/jni/delphi/JavaToDPR/index.html
JavaToDPR - Uma ferramenta (escrito em Java) para criar um Delphi dpr. Arquivo de um arquivo de classe Java.. É uma espécie de análogo ao javah ferramenta que vem com o JDK. Ambos são gratuitos e podem ajudar você a começar a escrever código nativo que está a ser chamado de Java Javad - Uma ferramenta semelhante ao de cima na medida em que gera o código Delphi a partir de um arquivo de classe Java.
ou
JAVADPR
javadpr Windows é um executável nativo que produz um arquivo de projeto Delphi a partir de métodos nativos declarado em um arquivo de classe Java. O arquivo resultante do projeto Delphi compilado em uma DLL que é usado pelo Java para interagir com o Delphi via Java Native Interface (JNI ) A fonte do Delphi está incluído no pacote abaixo, portanto, é simplesmente uma questão de compilá-lo com o Kylix para produzir um executável nativo do Linux. (Pode ser necessário um javadpr $ IFDEF) é um trabalho em andamento e há algumas questões que ainda precisam ser analisadas No entanto, em seu estado atual, javadpr é uma ferramenta de boas-vindas para os programadores Delphi usando o Java Native Interface. Ajuda pacote Exemplo de página de download inclui exemplos, o javadpr binária do Windows, ea fonte de Delphi. (~ 62 KB)
Para usar esta api a dll jvm.dll tem que estar no mesmo diretorio do executavel javadpr.exe.
http://www.pacifier.com/~mmead/jni/delphi/javadpr/javadpr.zip
OBSERVAÇÃO
A última versão oficial do JNI.pas é datado de 1 de novembro de 2002 e inclui suporte para JDK 1.1.x, 1.2.x, 1.3.x e 1.4.x tanto em Windows (Delphi) e Linux (Kylix). Ver-o. Faça o download. (Inclui MD.INC JNI)
IMPORTATNE
Nota para Delphi 5 Usuários JNI.pas O arquivo contém diretivas de compilador para lidar com as diferenças entre o Linux (Kylix) e Windows (Delphi). Especificamente, existem diretivas: ($ IFDEF MSWINDOWS) e ($ IFDEF LINUX), que indica a plataforma. Define LINUX Kylix e Delphi 6 e 7 definem MSWINDOWS. Delphi 5 não define MSWINDOWS, então você precisa definir isso manualmente. Para definir isso em Delphi 5, vá para o Projeto | Opções | Directories / Conditionals e adicionar MSWINDOWS ao condicional define.
OBS: NESTE EXEMPLO NAO E NECESSÁRIO UTILIZAR OS GERADORES DE STUBS
——————————————————————
CLASSE JAVA
———–
class HelloWorld
{
public native void displayHelloWorld();
static
{
System.loadLibrary(”HelloWorDELPHI”);
}
}
class Main
{
public static void main(String[] args)
{
HelloWorld hw = new HelloWorld();
hw.displayHelloWorld();
}
}
COMPILAR
CLASSE NATIVA
————-
library HelloWorlDELPHI;
uses
JNI;
procedure Java_HelloWorld_displayHelloWorld(PEnv: PJNIEnv; Obj: JObject); {$IFDEF WIN32} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
begin
Writeln(’Hello world!’);
end;
exports
Java_HelloWorld_DisplayHelloWorld;
end.
————————————————————————————————–
Obs.: Para executar sua classe dentro de pacote o comando de linha é
“C:\Program Files\Java\jdk1.6.0_12\bin\javah” -classpath C:\projetosnetbeans\JSenhaPWrapper\build\classes -jni -o JWrapper.h senhap.JWrapper”
Mas o que foi realizado
Em C/C++
1 - Você gera a sua classe Xpto.java
2 - Compila a classe
Criar esta classe sem pacote, nao criar esta classe dentro de pacotes….
Esta classe deverá ter o metodo que vc estará chamando
Criar metodo/atributos nativos correspondente aos que vc estará chamando em C/C++:
private static native int XPTOLog(String UserName, String Password);
O mesmo será usado da seguinte forma:
result = Xpto.XPTOLog(UserName, Password);
3 - Aplica na classe o javah.exe
Comando a ser utilizado:
javah -jni -o Xpto.h Xpto
3 - Deverpa ser gerado um arquivo Xpto.h (Stub)
Este arquivo c/c++ deverá conter o metodo correspondente ao existente na classe Java.
Ou seja, este metodo que vc estará chamando:
Mais ou menos alguma coisa assim: Java_XPTOLog
NAO PODE ESQUECER DE PASSAR PARA WRAPPER O NOME DO METODO QUE DEVERÁ FICAR DISPONÍVEL:
JNIEXPORT jint JNICALL Java_XPTOLog(JNIEnv * env, jclass, jstring user, jstring pwd)
4 - Este arquivo Xpto.h deverá ser encorporado no projeto em C/C++ e compilado
5 - Compilar a dll
#include “Xpto.h”
#define DLLNAME “JNIDll.dll” - delphi
6 - Colocar estas dll no system32 e carregar assim: System.loadLibrary(”JNIDll”);
ou ampontar doretamente com o : System.load(”C:\\projetosnetbeans\\Dll\\JNIDll.dll”);
7 - pronto so executar…
obs.> Podem ocorrer erros de carregamento. Necessário verificar se a sua dll nao tem nenhuma outra dll que tem que estar no mesmo lugar.
Este processo tive a ajuda de um amigão Fabio Garbin.
Obs.: Colocar todos no mesmo doretorio (codigo java e dll) e executar java Main
Mais detalhes.
http://www.pacifier.com/~mmead/jni/delphi/JEDI/DOCS/delphi-jni-1.html
Categorias: Java | | Enviar por e-mail | Hits para esta publicação: 564






Segunda, 31 de Agosto de 2009 at 12:38
eu vou trrabalhar ae como GERENTE ne sr Ray da Costa
Segunda, 31 de Agosto de 2009 at 12:40
eu vou trabalha ai como GERENTE ne sr Ray da Costa
nossa sua empresa cresceu em bicho que roubada esse
delphi com java em !!!!!!