Acessando uma dll passando String por Referência

4 respostas
notielc

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

4 Respostas

Ev3rton

Olá,

Há algum tempo atras tive um problema parecido, se não me engano onde a DLL pedia um char* deveria ser enviado um array de bytes (byte[num]).

Se encontrar o projeto, posto a chamada aqui pra você.

[ ]'s

A

Cara,

ja utilizei JNA num projeto e foi feito assim, no C o metodo recebia uma char* e no java eu passava uma String e funciona.

t+

E

tentou passar o toCharArray da sua string?

notielc

Olá,

Na verdade já tentei array de char e bytes e nada, parece que ele tem q receber uma variavel vazia. Se crio um array de bytes com um tamanho ele diz que não está alocado.

Agora achei o COM4J, vou estudar para ver em que pode me ajudar

Se alguem tiver mais alguma sugestão…

Brigado

Criado 27 de novembro de 2011
Ultima resposta 28 de nov. de 2011
Respostas 4
Participantes 4