[JNA] Invalid memory access
Bonjour à tous,
Je dois faire appel à une fonction présente dans une dll C++. J'ai suivi le tuto de adiGuba ici
Voici la signature le de fonction à utiliser dans la dll.
Code:
1 2
|
__declspec( dllexport ) char* create_symbol(char* type, int intdata1, int intdata2, int intdata3, char* strdata1, char* strdata2, int& nb_port_left, int& nb_port_right, char**& port_names, char*& symbol_banner) |
Les paramètres type,intdata1/2/3 et strdata1/2 sont des entrées. D'après ce que j'ai compris on les passe par valeur simplement et JNA s'occupe des conversions nécessaires.
Les paramètres nb_port_left, nb_port_right, port_names, symbol_banner sont passés par adresse. ce sont les valeurs de retours.
J'ai créé l'interface DllImport qui doit hériter de jna.Library comme ceci
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
package jnatest;
import com.sun.jna.Library;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
public interface DllImport extends Library
{
String create_symbol(String _type, int _intdata1, int _intdata2, int _intdata3, String _strdata1, String _strdata2, IntByReference _nbPortLeft, IntByReference _nbPortRight, PointerByReference _portNames, String[] _symbolBanner);
} |
Et ensuite le main
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
package jnatest;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.ptr.PointerByReference;
public class DllImportMain
{
static
{
System.loadLibrary("mydll");
}
public static void main(final String[] args)
{
final String libName = "mydll";
final DllImport scerneImport = (DllImport)Native.loadLibrary(libName, DllImport.class);
final IntByReference _nbPortLeft = new IntByReference();
final IntByReference _nbPortRight = new IntByReference();
final PointerByReference _portNames = new PointerByReference();
final String[] _symbolBanner = new String[1];
scerneImport.create_symbol("eres", 1, 0, -1, "", "", _nbPortLeft, _nbPortRight, _portNames, _symbolBanner);
}
} |
Et j'ai l'erreur suivante :
Code:
1 2 3 4 5 6 7 8 9 10
|
Exception in thread "main" java.lang.Error: Invalid memory access
at com.sun.jna.Native.invokePointer(Native Method)
at com.sun.jna.Function.invokePointer(Function.java:470)
at com.sun.jna.Function.invokeString(Function.java:651)
at com.sun.jna.Function.invoke(Function.java:395)
at com.sun.jna.Function.invoke(Function.java:315)
at com.sun.jna.Library$Handler.invoke(Library.java:212)
at com.sun.proxy.$Proxy0.create_symbol(Unknown Source)
at jnatest.ScerneImportMain.main(ScerneImportMain.java:32) |
Est-ce que c'est une erreur sur les type que j'utilise pour les pointeurs?
Merci pour vos idées.