Dúvida - Problema ao usar uma DLL

Boa noite a todos !!!

Eu estou tentando utilizar uma dll (objeto com) em java, mas ta dando erro.

A DLL que quero utilizar é a flexdocs (Download da DLL), Chamada

Segue abaixo o código fonte que eu estou tentando utilizar:

package br.com.teste;

import javax.swing.JOptionPane;
import com.sun.jna.Library;
import com.sun.jna.Native;

public class Teste {

public interface BibliotecaNativa extends Library {
// public int soma(int n1, int n2);
public long geraPdfDANFE(String XML, String OrigDadosEmissor, String quadroRecibo, String quadroFatura,
String quadroISSQN, String DPEC, String separadorItem, String gravaPDF, String msgResultado);

}

public static void main(String[] args) {
// TODO Auto-generated method stub
try {

  	JOptionPane.showMessageDialog(null, "Começa");
  	BibliotecaNativa lib = (BibliotecaNativa) Native.loadLibrary("C:\\FlexDocs\\NFe_Util\\2Gv2.07b\\NFe_Util_2G.dll", BibliotecaNativa.class);
  	String msgResultado = "";
  	String XML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><nfeProc versao=\"3.10\" xmlns=\"http://www.portalfiscal.inf.br/nfe\"><NFe xmlns=\"http://www.portalfiscal.inf.br/nfe\"><infNFe Id=\"NFe35160808081892000104550010000029961000029963\" versao=\"3.10\"><ide><cUF>35</cUF><cNF>00002996</cNF><natOp>Venda de mercadoria adquirida ou recebida de terceiros</natOp><indPag>1</indPag><mod>55</mod><serie>1</serie><nNF>2996</nNF><dhEmi>2016-08-01T09:30:00-03:00</dhEmi><dhSaiEnt>2016-08-01T09:30:00-03:00</dhSaiEnt><tpNF>1</tpNF><idDest>2</idDest><cMunFG>3541505</cMunFG><tpImp>1</tpImp><tpEmis>1</tpEmis><cDV>3</cDV><tpAmb>1</tpAmb><finNFe>1</finNFe><indFinal>1</indFinal><indPres>0</indPres><procEmi>3</procEmi><verProc>3.10.86</verProc></ide><emit><CNPJ>08081892000104</CNPJ><xNome>CLAUDENEI BARBOSA DE SOUZA ME</xNome><xFant>CLAUDENEI BARBOSA DE SOUZA ME</xFant><enderEmit><xLgr>AV. TIRADENTES</xLgr><nro>945</nro><xBairro>Centro</xBairro><cMun>3541505</cMun><xMun>Presidente Venceslau</xMun><UF>SP</UF><CEP>19400000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais><fone>1832712146</fone></enderEmit><IE>563083663115</IE><CRT>1</CRT></emit><dest><CPF>06960423805</CPF><xNome>FERNANDO PLATZECK ESTRELLA</xNome><enderDest><xLgr>FAZENDA VARJAO DO LONTRA</xLgr><nro>sn</nro><xBairro>ZONA RURAL</xBairro><cMun>5002704</cMun><xMun>Campo Grande</xMun><UF>MS</UF><CEP>79000000</CEP><cPais>1058</cPais><xPais>BRASIL</xPais><fone>1832713078</fone></enderDest><indIEDest>1</indIEDest><IE>285613316</IE></dest><det nItem=\"1\"><prod><cProd>2227</cProd><cEAN/><xProd>LUVA GALVANIZADA 1.1/2</xProd><NCM>73079200</NCM><CFOP>6404</CFOP><uCom>UN</uCom><qCom>2.0000</qCom><vUnCom>15.0000000000</vUnCom><vProd>30.00</vProd><cEANTrib/><uTrib>UN</uTrib><qTrib>2.0000</qTrib><vUnTrib>15.0000000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>10.28</vTotTrib><ICMS><ICMSSN500><orig>0</orig><CSOSN>500</CSOSN></ICMSSN500></ICMS><PIS><PISOutr><CST>99</CST><vBC>30.00</vBC><pPIS>0.2300</pPIS><vPIS>0.07</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>30.00</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>0.29</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem=\"2\"><prod><cProd>3716</cProd><cEAN/><xProd>NIPLE GALVANIZADO - 1.1/2</xProd><NCM>73071990</NCM><CFOP>6404</CFOP><uCom>PC</uCom><qCom>3.0000</qCom><vUnCom>11.0800000000</vUnCom><vProd>33.24</vProd><cEANTrib/><uTrib>PC</uTrib><qTrib>3.0000</qTrib><vUnTrib>11.0800000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>11.39</vTotTrib><ICMS><ICMSSN500><orig>0</orig><CSOSN>500</CSOSN></ICMSSN500></ICMS><PIS><PISOutr><CST>99</CST><vBC>33.24</vBC><pPIS>0.2300</pPIS><vPIS>0.08</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>33.24</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>0.32</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem=\"3\"><prod><cProd>2411</cProd><cEAN/><xProd>LUVA SOLD ROSC 50MMX1.1/2 (1)</xProd><NCM>39174090</NCM><CFOP>6404</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>13.5100000000</vUnCom><vProd>81.06</vProd><cEANTrib/><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>13.5100000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>26.01</vTotTrib><ICMS><ICMSSN500><orig>0</orig><CSOSN>500</CSOSN></ICMSSN500></ICMS><PIS><PISOutr><CST>99</CST><vBC>81.06</vBC><pPIS>0.2300</pPIS><vPIS>0.19</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>81.06</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>0.77</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem=\"4\"><prod><cProd>2510</cProd><cEAN/><xProd>ADESIVO PVC AZUL POTE DE 175G. (1)</xProd><NCM>35061090</NCM><CFOP>6404</CFOP><uCom>UN</uCom><qCom>1.0000</qCom><vUnCom>9.4100000000</vUnCom><vProd>9.41</vProd><cEANTrib/><uTrib>UN</uTrib><qTrib>1.0000</qTrib><vUnTrib>9.4100000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>3.02</vTotTrib><ICMS><ICMSSN500><orig>0</orig><CSOSN>500</CSOSN></ICMSSN500></ICMS><PIS><PISOutr><CST>99</CST><vBC>9.41</vBC><pPIS>0.2300</pPIS><vPIS>0.02</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>9.41</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>0.09</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem=\"5\"><prod><cProd>3863</cProd><cEAN/><xProd>ADAPTADOR SOLD 50MM x 1.1/2 (3)</xProd><NCM>39172900</NCM><CFOP>6102</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>2.8100000000</vUnCom><vProd>16.86</vProd><cEANTrib/><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>2.8100000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>5.41</vTotTrib><ICMS><ICMSSN101><orig>0</orig><CSOSN>101</CSOSN><pCredSN>2.3300</pCredSN><vCredICMSSN>0.39</vCredICMSSN></ICMSSN101></ICMS><PIS><PISOutr><CST>99</CST><vBC>16.86</vBC><pPIS>0.2300</pPIS><vPIS>0.04</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>16.86</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>0.16</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem=\"6\"><prod><cProd>3725</cProd><cEAN/><xProd>UNIAO ASS BRONZE GALVANIZADO -1 1/2</xProd><NCM>73071990</NCM><CFOP>6404</CFOP><uCom>PC</uCom><qCom>2.0000</qCom><vUnCom>71.7200000000</vUnCom><vProd>143.44</vProd><cEANTrib/><uTrib>PC</uTrib><qTrib>2.0000</qTrib><vUnTrib>71.7200000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>49.17</vTotTrib><ICMS><ICMSSN500><orig>0</orig><CSOSN>500</CSOSN></ICMSSN500></ICMS><PIS><PISOutr><CST>99</CST><vBC>143.44</vBC><pPIS>0.2300</pPIS><vPIS>0.33</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>143.44</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>1.36</vCOFINS></COFINSOutr></COFINS></imposto></det><det nItem=\"7\"><prod><cProd>2477</cProd><cEAN/><xProd>LUVA SOLD BB 50MM (3)</xProd><NCM>84248129</NCM><CFOP>6404</CFOP><uCom>UN</uCom><qCom>6.0000</qCom><vUnCom>2.1000000000</vUnCom><vProd>12.60</vProd><cEANTrib/><uTrib>UN</uTrib><qTrib>6.0000</qTrib><vUnTrib>2.1000000000</vUnTrib><indTot>1</indTot></prod><imposto><vTotTrib>3.32</vTotTrib><ICMS><ICMSSN500><orig>0</orig><CSOSN>500</CSOSN></ICMSSN500></ICMS><PIS><PISOutr><CST>99</CST><vBC>12.60</vBC><pPIS>0.2300</pPIS><vPIS>0.03</vPIS></PISOutr></PIS><COFINS><COFINSOutr><CST>99</CST><vBC>12.60</vBC><pCOFINS>0.9500</pCOFINS><vCOFINS>0.12</vCOFINS></COFINSOutr></COFINS></imposto></det><total><ICMSTot><vBC>0.00</vBC><vICMS>0.00</vICMS><vICMSDeson>0.00</vICMSDeson><vFCPUFDest>0.00</vFCPUFDest><vICMSUFDest>0.00</vICMSUFDest><vICMSUFRemet>0.00</vICMSUFRemet><vBCST>0.00</vBCST><vST>0.00</vST><vProd>326.61</vProd><vFrete>0.00</vFrete><vSeg>0.00</vSeg><vDesc>0.00</vDesc><vII>0.00</vII><vIPI>0.00</vIPI><vPIS>0.76</vPIS><vCOFINS>3.11</vCOFINS><vOutro>0.00</vOutro><vNF>326.61</vNF><vTotTrib>108.60</vTotTrib></ICMSTot></total><transp><modFrete>1</modFrete></transp></infNFe><Signature xmlns=\"http://www.w3.org/2000/09/xmldsig#\"><SignedInfo><CanonicalizationMethod Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/><SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/><Reference URI=\"#NFe35160808081892000104550010000029961000029963\"><Transforms><Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/><Transform Algorithm=\"http://www.w3.org/TR/2001/REC-xml-c14n-20010315\"/></Transforms><DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/><DigestValue>bt2GifORuOpLIVojrQjxiP+LGw0=</DigestValue></Reference></SignedInfo><SignatureValue>Wbk91j4DXy+9e4Ghj8nT0mflcLyLLSuLQfwOHTWyKjjHbAvhhEhaI8MtNDaOPOlRyGsoG/rIsC4QHAtMYYHp7i9lgo2SBIPcopjN5dt4+XbciCGvrOwAi0IiROxbzJMXDfuSoCAYyAE74dh/O5FK4KKlnZ5IPKl1qe/ufgiQXtPfodB8f9JzQnji4UW672Z/3pnW4ZcK6c+5hwmrwUMrM2Eq1fQfoEKoCQ7yegIMrBQRT9Rb3km5QgAB/EwRHCCTbV7hP/rZfEQ1BzfRhP0H61JEFKM6+ogY4eHIDcqkSRQqsYBswnBdLJXRHmJkCRlr+WCB7qcYAkxHSv+NeUIeEA==</SignatureValue><KeyInfo><X509Data><X509Certificate>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</X509Certificate></X509Data></KeyInfo></Signature></NFe><protNFe versao=\"3.10\"><infProt><tpAmb>1</tpAmb><verAplic>SP_NFE_PL_008i2</verAplic><chNFe>35160808081892000104550010000029961000029963</chNFe><dhRecbto>2016-08-02T12:55:15-03:00</dhRecbto><nProt>135160472956341</nProt><digVal>bt2GifORuOpLIVojrQjxiP+LGw0=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></nfeProc>";
  	long resultado = lib.geraPdfDANFE(XML, "", "S", "S", "S", "", "T", "", msgResultado);
  	JOptionPane.showMessageDialog(null, resultado);
  } catch (Exception e) {
  	JOptionPane.showMessageDialog(null, e.toString());
  }
  JOptionPane.showMessageDialog(null, "FINAL");

}

}

O erro gerado é Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking up function 'geraPdfDANFE': Não foi possível encontrar o procedimento especificado.

Alguem pode me ajudar?

A DLL declara o o método geraPdfDANFE com a seguinte assinatura:

// o retorno é int
int geraPdfDANFE(string XML,
                 string origemDadosEmissor,
                 string quadroRecibo,
                 string quadroFatura,
                 string quadroISSQN,
                 string DPEC,
                 string separadorItem,
                 string gravaPDF,
                 out string msgResultado) // este é um parâmetro tipo OUT

Na sua interface Java o retorno também deve ser int e o parâmetro msgResultado não pode ser String, pois na DLL esse parâmetro é passado por referência e é alterado pela execução do método.
Então você terá que mudar sua interface Java declarando o parâmetro como sendo um byte[] ou um Pointer ou um ByReference, de forma que o código nativo possa alterar o conteúdo desse parâmetro.

Bom dia!! Obrigado pela ajuda.

Outra Dúvida, toda vez q eu for utilizar uma dll eu sou obrigado a escrever o header.h do cabeçalho?

Att. Vinicius

Amigo estou passando pelo mesmo problema, ajustei a msgResultado para byte[] mas mesmo assim continua o erro:
"Handler dispatch failed; nested exception is java.lang.UnsatisfiedLinkError: Error looking up function ‘geraPdfDANFE’: Não foi possível encontrar o procedimento especificado

Como ficou sua interface?

O diretório onde a DLL se encontra está incluso no java.library.path ?
Tem certeza que sua arquitetura é a mesma da DLL? Isto é, se a DLL é de 32 bits, você precisa usar um Java de 32 bits. Se a DLL é de 64 bits, precisa usar um Java de 64 bits.

hhuumm! vou verificar, pois meu java é 64!
A dll precisa ficar no java.library.path?

Obrigado

A dll é 32! Você usa java 32?

Se a DLL for 32, ela só pode ser interfaceada com Java de 32.
Se sua aplicação precisa ser 64, recomendo tu criar uma pequena aplicação de 32 só pra comunicar com a DLL, aí sua aplicação principal de 64 “conversa” com essa aplicação de 32.

Sim, você pode setar em linha de comando ao executar o Java:

java -Djava.library.path=<pasta da dll> <resto dos argumentos pra rodar sua classe main>

Acho que vou precisar ver outra maneira, pois tudo aqui eh 64. Fora isso os serviços aqui rodam no linux, ou seja, acho que não vai dar usar essa dll. Estava tentando usar c#, mas mesmo por ele estou tendo problema, pois ele não reconhece a dll.

vlw pela ajuda.

Acho que a menor dor de cabeça será implementando um serviço em 32 bits.
Aí todas suas outras soluções 64 bits podem se comunicar com esse serviço.