JNI - Dll 32 bits X Dll 64 bits [RESOLVIDO]

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:

  1. Com a JRE para Windows 32, o programa não rodou.

  2. Com a JRE para Windows 64, o Java não conseguiu carregar a “Dll em C”

  3. 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”

  4. 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.