Olá amigos do guj. Estou criando uma aplicação que tem integração com o Autocad e ao fazer os primeiros testes criei a dll e executei no autocad através do netload. ao tentar chamar o outro método via java usando JNA apareceu o seguinte erro:
Exception in thread “AWT-EventQueue-0” java.lang.UnsatisfiedLinkError: Error looking up function ‘teste’: Não foi possível encontrar o procedimento especificado.
at com.sun.jna.Function.<init>(Function.java:129)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:272)
at com.sun.jna.Library$Handler.invoke(Library.java:191)
at $Proxy0.teste(Unknown Source)
at testedll.SystemTrayMenu$3.actionPerformed(SystemTrayMenu.java:61)
at java.awt.MenuItem.processActionEvent(MenuItem.java:627)
............
O código da Dll escrita em c# está abaixo:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.AutoCAD.Runtime;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
[assembly: CommandClass(typeof(ClassLibrary.Class1))]
namespace ClassLibrary
{
public class Class1
{
[CommandMethod("hello")]
static public void hello() // execução no autocad - ok
{
Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("Hello World");
}
[CommandMethod("teste")]
static public char[] teste() // execução no java - nok
{
String a = "##### teste #####";
char[] teste = a.ToCharArray();
return teste;
}
}
}
A interface que implementa a assinatura do método da dll é a seguinte:
import com.sun.jna.Library;
public interface AccessDll extends Library {
public void hello();
public String teste();
}
o código que acessa a dll é o seguinte:
System.out.println("Executa DLL...");
AccessDll lib = (AccessDll) Native.loadLibrary("ClassLibrary", AccessDll.class);
System.out.println(lib.teste());