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