Boa noite a todos,
Estou tendo um problema para utilizar Java em um Windows 64 bits carregando uma Dll 32 Bits. Deixa eu tentar explicar melhor…
O meu programa em Java precisa “chamar” uma Dll que eu não tenho acesso ao código fonte. Para isso, eu criei uma outra Dll em C que, com JNI, eu chamo a outra Dll:
Ficou mais ou menos assim:
“Programa Java” <- JNI -> “Dll em C” <–> “Dll comercial”
Bom, no Windows 32 bits funcionou sem problemas.
Porém no Windows 64, aconteceram os seguintes cenários:
-
Com a JRE para Windows 32, o programa não rodou.
-
Com a JRE para Windows 64, o Java não conseguiu carregar a “Dll em C”
-
Compilei a “Dll em C” para 64 bits. Neste caso, o JRE conseguiu carregar a “Dll em C”, porém esta não conseguiu carregar a “Dll Comercial”
-
Utilizei um outro programa (sem ser em Java) compilado para Windows 32, carrengando a “Dll em C” compilada para Windows 32, e tudo funcionou, mesmo estando no Windows 64.
Bom, a minha pergunta é: seria possível eu utilizar a JRE para Windows 64, mas “solicitar” para que o programa em Java rode como se fosse para Windows 32? Pois assim, tenho alguma esperança deste programa rodar em um Windows 64.
Em todo o caso, se tiverem alguma outra sugestão, estou aceitando :lol:
Obrigado,
Marcelo
Olá!
A resposta para seu problema não tenho, porque eu tive o mesmo problema com windows 64 bits e acabei formatando o PC e colocando 32 bits.
Pra falar a verdade, o windows 64bits durou somente 1 semana no meu computador por problemas com o Java.
Uma coisa que vc pode fazer é verificar se as funções que vc está usando na sua DLL em JNI não tem uma versão para 64bits. A Microsoft tem umas diferenças com relação às funções C.
Caso exista funções windows para 32 e para 64 bits, vc terá que fazer duas versões da sua DLL.
Posta seu código C aqui pra gente analisar.
Até mais
Olá,
Eu tive este problema com o Java Media Framework, e consegui resolver mudando a JVM do meu projeto para uma JVM x86.
Seu windows é 64bits ok.
Mas mesmo assim vc pode instalar uma JVM 32bts (x86) e conviver com as 2 ao mesmo tempo.
Para rodar este projeto, selecione a JVM x86 e em teoria não terá mais problemas.
Foi isso o que vc já tentou?
Caros,
Para resolver este caso, instalei a JVM 32bits nas máquinas 64 bits, e estou forçando a execução através da JVM 32 bits.
O pessoal do suporte que não ficou muito feliz de ter que instalar a uma outra JVM em cada máquina, mas não consegui outra alternativa :lol:
Só para deixar um pouco mais claro o problema que tive, no código em Java, o erro dava na linha abaixo, quando a minha dll era compilada como 32 bits:
System.loadLibrary(dll);
E quando a minha dll era compilada como 64 bits, o erro dava no meu código em C na seguinte linha:
dll = LoadLibrary(arquivo);
Obrigado a todos pela ajuda.