Jump to content

dev botao

Pegar Dll Automáticamente 32 Ou 64


edsonmoretti
  • Este tópico foi criado há 3505 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Nós temos clientes com computador 32 e 64 bits, e para não ficar configurável ou toda vez construir, fiz essa alteração para pegar a dll 32 ou 64 de forma automática:

 

Na interface InteropLib

 

Mudei a linha:

public static final String JNA_LIBRARY_NAME = "ACBrFramework32";

para:

public static final String JNA_LIBRARY_NAME = PegarDLLpelaArqSO.DLL;

e dentro da class adicionei o seguinte método estático:

public static String pegaArq() {
   OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
   return operatingSystemMXBean.getArch().equals("x64")?"ACBrFramework64":"ACBrFramework32";
}
Link to comment
Share on other sites

Olá edsonmoretti,

Primeiramente gostaríamos de agradecer a contribuição, realmente é um fator que complica bastante as configurações de ambiente.

Alteramos apenas um detalhe para detecção da JVM, quando o bean ManagementFactory.getOperatingSystemMXBean().getArch() é acionado, há várias combinações possíveis de retorno dependendo do SO em questão, internamente é acionado System.getProperty("os.arch").

Segundo a Oracle o modelo correto para fazer esta distinção é obtendo a propriedade, System.getProperty("sun.arch.data.model"), conforme pode ser visto no link: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html, questão "When writing Java code, how do I distinguish between 32 and 64-bit operation?".

Devido a isto o código ficou da seguinte forma:

class PegarDLLpelaArqSO {
	private static String library = "";
	public static String pegarArq() {
		if (library.isEmpty()) {                
			library = System.getProperty("sun.arch.data.model").equals("64") 
					? "ACBrFramework64" : "ACBrFramework32";
		}
		return library;
	}
}

A modificação está presente no SVN. Qualquer melhoria que fizer ou achar necessária nos informe para aumentarmos a solidez da biblioteca em java.

 

Att.,

 

José Mauro

Link to comment
Share on other sites

Obrigado, fico feliz em ter contribuído,  em meu caso eu deixei assim:

            return System.getProperty("sun.arch.data.model").equals("64") ? "ACBrFramework64" : "ACBrFramework32";

Pois o método é chamado apenas uma vez, no meu caso.
 

Também gostei pois reduziu os imports, espero mais a frente contribuir mais.

 

Um abraço.

Link to comment
Share on other sites

Sem problema edsonmoretti pode deixar da forma que for coerente em seu contexto. Foi colocado desta forma porque um contexto estático é inicializado a nível somente uma vez dentro da JVM e economiza recursos caso haja mais de um acionamento.

 

Só tome cuidado quando for fazer algum merge com as possíveis melhorias, correções que podem vir na biblioteca para não perder a suas personalizações.

 

Abraço.

Link to comment
Share on other sites

  • 1 month later...

Tive problemas com Windows 8 x64

Não reconhecia dessa forma:

                    ? "ACBrFramework64" : "ACBrFramework32";

 

Erro:

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: Unable to load library 'bin/ACBrFramsework64': Native library (win32-x86-64/bin/ACBrFramsework64) not found in resource path...

O mesmo ocorria quando colocava o .dll

 

dai alterei o retorno, usando file:

de:

return System.getProperty("sun.arch.data.model").equals("64") ? "bin/ACBrFramework64.dll" : "bin/ACBrFramework32.dll";

para:

return new File(System.getProperty("sun.arch.data.model").equals("64") ? "bin/ACBrFramework64.dll" : "bin/ACBrFramework32.dll").getAbsolutePath();

E com isso resolveu meu problema, não sei se foi um POG, mas resolveu.

Isso só aconteceu no Win8, no 7 e no XP estava normal.

 

Caso alguém tenha o mesmo problema.

Edited by edsonmoretti
Link to comment
Share on other sites

  • 6 months later...

No meu como utilizo linux estou com o seguinte erro.

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'ACBrFramework64': libACBrFramework64.so: cannot open shared object file: Arquivo ou diretório não encontrado
	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)
	at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:194)
	aJava Result: 1

Como faço nessa situação ?

Link to comment
Share on other sites

  • 1 month later...
String apoio = Caixa.aCBrECF.dadosUltimaReducaoZ();

DadosReducaoZClass drz = Caixa.aCBrECF.getDadosReducaoZClass();
if (drz != null) {
   R02.setCOOInicial(Integer.valueOf(drz.getNumeroCOOInicial()));
}

Bom dia!

 

edsonmoretti, a dll ACBrFramework64 não terá mais suporte?

 

 

Aproveitando, estou tentando recuperar o COO_INICIAL da ultima redução z mas não traz resultado. Sempre vem uma string vazia "".

Alguém esta conseguindo recuperar esta informação?

Link to comment
Share on other sites

  • 4 weeks later...

String apoio = Caixa.aCBrECF.dadosUltimaReducaoZ();

DadosReducaoZClass drz = Caixa.aCBrECF.getDadosReducaoZClass();
if (drz != null) {
   R02.setCOOInicial(Integer.valueOf(drz.getNumeroCOOInicial()));
}

Bom dia!

 

edsonmoretti, a dll ACBrFramework64 não terá mais suporte?

 

 

Aproveitando, estou tentando recuperar o COO_INICIAL da ultima redução z mas não traz resultado. Sempre vem uma string vazia "".

Alguém esta conseguindo recuperar esta informação?

 

Isso mesmo.

Vc ta chamando o metodo dessa forma:

instanciando..

ativando....

ecf.dadosUltimaReducaoZ();

String coo = ecf.getDadosReducaoZClass().getCoo();

 

vlw; -)

Link to comment
Share on other sites

  • Este tópico foi criado há 3505 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...