Boa Noite,
Pessoal estou com um problema para acessar uma função de uma DLL de terceiros, a função recebe uma string por referência. Na implementação em java como faço para passar essa variavel por referencia ?? Segundo a documentação da DLL essa variavel por referencia é uma String
Vou colocar os códigos abaixo :
Interface de acesso DLL :
public interface BmfDll extends Library {
public Integer BBMFSign(String xmlSign, String inTag, PointerByReference outXML);
public Integer BBMFSignEx(String xmlSign, String inTag, byte[] outXML);
public Integer BBMFVerify(String inXML, String inTag);
}
Teste de acesso :
public class DllUtils {
public static void main(String args[]) {
Native.setProtected(true);
BmfDll lib = (BmfDll) Native.loadLibrary("BBMFSecurity", BmfDll.class);
String xmlSign = "<BMFDOC><BMFSISMSG><BBMFTransacao id=\"000000000000001\">abc</BBMFTransacao></BMFSISMSG></BMFDOC>";
String outXML = new String();
Integer bbmfSignExResult = lib.BBMFSignEx(xmlSign, "BBMFTransacao", outXML);
switch (bbmfSignExResult) {
case -1:
System.out.println("Parâmetro de saída não alocado!");
break;
case -2:
System.out.println("Parâmetro de saída com tamanho insuficiente");
break;
case -3:
System.out.println("Não foi possível encontrar as tags BM&F/ReqExterna");
break;
case -5:
System.out.println("Tag não pode ser vazia");
break;
case -10:
System.out.println("Tamanho insuficiente de entrada (25 caracteres)");
break;
case -11:
System.out.println("Mensagem dentro de BMFSISMSG vazia");
break;
case -12:
System.out.println("Mensagem dentro de BMFSISMSG muito longa");
break;
case -13:
System.out.println("Erro em algoritmo de hash!");
break;
default:
System.out.println(outXML);
break;
}
}
}
Quando executo ele me retorna a seguinte mensagem :
“Parâmetro de saída com tamanho insuficiente” , na documentação informa que essa variavel tem que ter o tamanho do XML enviado + 90 caracteres, como faço para alocar esse tamanho, estou utilizando o JNA.
Obrigado
Abraços