JNA com dll e .so com a mesma assinatura de métodos

1 resposta
F

Olá ALL,

Estou trabalhando em um projeto para rodar tanto em Windows quanto em Linux, e uso uma shared library de terceiros disponível para ambos os sistemas operacionais com a mesma assinatura de métodos. Porém a calling convention da dll é stdcall enquanto a da .so é cdecl.

Para acessá-las em java estou usando jna, mas não gostaria de duplicar código, duas interfaces e duas classes, uma interface para cada calling convention. Gostaria de escrever um único código para a função de callback. Isto é possível ?

A única mudança no código abaixo para acessar a .so em linux é mudar a interface para:

import com.sun.jna.Callback;
interface IExternLibCallback extends Callback {…}

Segue o exemplo do código para acesso à dll:

Interface para stdcall (Windows)

package teste1;

import com.sun.jna.win32.StdCallLibrary;

interface IExternLibCallback extends StdCallLibrary.StdCallCallback {

void callback(JEventDataStructure context_data);
}

Classe que implementa a interface

package teste1;

class ExternLibCallback implements IExternLibCallback {
...Outros códigos da classe vão aqui....

   @Override
public void callback(JEventDataStructure contextData) {
      
                  ....Código da função de callback 
   }

}

Obrigado,

Fernando

1 Resposta

Kanin_Dragon

Jovem,

Durante um projeto que participei como arquiteto em um grande banco internacional tivemos que devolver uma framework para tal finalidade, na época não existiam padrões a ser referenciado para nossa solução. Visto que para a instituição era um ponto determinante seguir algum padrão de projeto.

Abs,

Criado 2 de junho de 2011
Ultima resposta 2 de jun. de 2011
Respostas 1
Participantes 2