Problemas com .JAR + .DLL (Agora com arquivo de teste )[RESOLVIDO]

Pessoal,
Estou criando um .JAR da minha aplicação, mas acontece que uma das bibliotecas que uso, utiliza uma DLL que tenho que colocar no /System32.

Acontece que ao tentar executar meu programa pelo .JAR ele da o erro exatamente em uma das funções que utiliza a .DLL.
Tem algum modo de gerar o .JAR com a .DLL??

Meu arquivo Manifest:
Citação:

Uma tentativa para ver se ele incluia o path da DLL

Citação:

Mas nenhum funcionou…Algué sabe como posso fazer nesse caso…

Eu vi algo parecido no core java, acredito que na versão avançada, de uma olhada, acredito que vai ter o que vc procura.

Qual é o erro ?

Manifest-Version: 1.0
Main-Class: registro.Main
Name: registro\Main.class
Java-Bean: True
Class-Path: c:/Arquivos de Programas/Java/LatteLib/lattelib/lib/LatteLibWin-3.0.0.jar

Dois problemas aqui.

  1. Acho que você não pode usar “” em nomes de arquivos e classes, e mesmo no “Name” não é bom pôr isso.
  2. Espaços em nomes de arquivo nunca foram boa coisa. Experimente copiar o LatteLibWin-3.0.0.jar para um diretório sem espaços, e talvez tirar a letra do drive (não sei se “:” também não é bom de usar)
Manifest-Version: 1.0
Main-Class: registro.Main
Name: Main
Java-Bean: true
Class-Path: /LatteLibWin-3.0.0.jar

O erro não encontra o

lattelib.win.WindowsException

Que é o método que usa a DLL para funcionar…

Ele não encontra o método. A DLL ele consegue encontrar e carregar?

Pode ser que o nome do método native da sua classe esta diferente da que está dentro da DLL.

Acontece que eu consigo executar pelo Netbeans…
E para ver se o problema era com o carregamento da DLL, eu tirei a DLL do windows/System32, e tetei rodar pelo NetBeans, ai que eu tive certeza, pois o erro foi o mesmo que estava dando no .JAR.

Eu acho isso um grande problema…pois tenho uma aplicação pronta que não posso distribuir, pq não hà a possibilidade de o .JAR (Executavel padrão do Java) localiza uma DLL…
E essa DLL nem é minha, faz parte de uma API que usei.
Procurei em tudo que forum e até agora parece que esse problema não tem solução…

Eu passei por algo similar aqui no trabalho… a solução que eu encontrei foi tentar encontrar a .DLL no windows\system32 se eu não encontrar eu baixo do meu servidor e gravo lá… mais a minha aplicação [APPLET] roda na intranet.

Então, mas esse não é o grande problema…acontece que a DLL na minha máquina está no System32. E não seria o problema copiar a DLL no System32 do usuário…
Acontece que o .JAR não procura essa .DLL.
Na hora de compilar pelo NetBeans por exemplo, ele procura e executa essa DLL.
Mas pelo .JAR creio eu que deve ter alguma opção ou alguma forma de forçar isso…
Só que ninguém sabe fazer isso…
Agora imagine uma aplicação grande que necessite de alguma dll…como os programadores fazem para executar ela???

Isso eu gostaria de saber…

No meu caso é uma impressora de cheque eu dou um load na DLL no start do meu applet

              System.loadLibrary("minhaDLL");

E pronto da tudo certo!

É isso eu ainda não tinha tentado…
Nesse LoadLibrary(). Vc coloca o caminho completo da dll, ou somente o nome dela, independente do local???/

Só o nome da DLL sem extensão nem nada.

Se quizer o caminho todo use :

System.load("D:\Windows\system32\minhaDLL.dll");

Blz, vou testar e coloco o resultado…

Uma última pergunta…eu coloco isso no inicio do método main né??

Exato!

Se ainda tiver problemas da um toque que eu tento te ajudar.

Cara por incrivel que pareça não funcionou…

Eu fiz um pequeno programa que testa uma função que utiliza essa dll…
Eu estou anexando o código do programa e a API responsável pelo acesso do Registro…

Ambos são muito pequenos…menos de 500 Kb…
Se alguem se enteressar em testar a crição de Jar e tentar me ajudar…eu agradeço…
Acho que dessa forma fica mais facil…

Qualquer problema com o arquivo me mande uma MP com seu e-mail e envio direto…

Oi Bruno,

Eu executei sem problemas!

Como você esta executando o jar? Assim… você precisa colocar no classpath o LatteLibWin-3.0.0.jar ou… executar da seguinte forma

java -cp LatteLibWin-3.0.0.jar;testejar.jar testejar.Main 

Nota : os dois jars estão na mesma pasta.

Pedaço da Resposta :

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall[code]
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\04aaf852eb8c24d7e1fbc7f4b8948dac
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\29c0ba7fc496ff1c084b2ff2d02a549b
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\57be9eb60bd42113691db7da5dd9e505
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\AddressBook
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\AdobePhotoshop6.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Branding
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\ConnectionManager
(...)
[/code]4aaf852eb8c24d7e1fbc7f4b8948dac
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall9c0ba7fc496ff1c084b2ff2d02a549b
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall7be9eb60bd42113691db7da5dd9e505
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\AddressBook
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\AdobePhotoshop6.0
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\Branding
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Uninstall\ConnectionManager
(...)

[EDITADO]
Só mais uma coisa… você nem precisa dar load na DLL porque você usa uma API acessa a DLL, no meu caso isso não existia, eu acessava a DLL diretamente.

Ou ainda usando o Manifest.MF (seu problema inicial)…

Minha estrututa:

\Projeto
+- \lib
|   +- LatteLibWin-3.0.0.jar
+- testejar.jar

MANIFEST.INF

Manifest-Version: 1.0
Class-Path: lib/LatteLibWin-3.0.0.jar
Main-Class: testejar.Main

Se eu não estou enganada quando há espaço no nome do diretorio é bom coloca-lo entre aspas, pelo menos eu ja tive problemas com isso.

[quote=Armitage]Ou ainda usando o Manifest.MF (seu problema inicial)…

Minha estrututa:

\Projeto
+- \lib
|   +- LatteLibWin-3.0.0.jar
+- testejar.jar

MANIFEST.INF

Manifest-Version: 1.0
Class-Path: lib/LatteLibWin-3.0.0.jar
Main-Class: testejar.Main

Se eu não estou enganada quando há espaço no nome do diretorio é bom coloca-lo entre aspas, pelo menos eu ja tive problemas com isso.

[/quote]

Não consigo baixar seu arquivo…
Vou testar em casa e posto a resposta…

Armitage vlw mesmo…

Tenta de novo!