JNI und verschiedene Compiler



  • hi,

    ich habe eine dll, die ich übers JNI in Java einbinden will. Ich bekomme allerdings einen UnsatisfiedLinkError, weil die Methoden nicht gefunden werden.

    Ich hatte schon mal ein ähnliches Problem, damals lud Java eine dll, die ich mit VC erstellt hatte, problemlos, aber eine aus DevC++ nicht (identischer Code). Muss man in DevC++ irgendwelche speziellen Einstellungen machen, um die dlls mit JNI laden zu können?

    Danke schonmal,
    Campino



  • Du musst erstmal mit einem Programm wie EXEHDR oder DUMPBIN oder was Du zur Verfuegung hast, nachschauen, wie die Signaturen der jeweiligen C bzw. C++ Funktionen in die DLL exportiert wurden. In der JNI-Dokumentation steht, welche Aufrufskonventionen (Calling Conventions) zugelassen sind. Bei fast jedem C oder C++ Compiler kann man angeben, welche Calling-Convention verwendet wird (ggf. ueber eine Markierung wie "__stdcall" usw.).

    Meistens bedeutet ein Name wie

    TestFunktion@4
    

    also mit einem "@"-Zeichen, dass es sich um die Pascal-Calling-Convention ("_pascal") oder eine aehnliche Calling-Convention handelt.
    Funktionen mit "C"-Exportierung ("_cdecl") sehen meist so aus:

    _TestFunktion
    

    Funktionen ohne Markierungen, also

    TestFunktion
    

    beziehen sich meist auf die neuere "_stdcall" Calling Convention (es gab auch mal eine, die von "_pascal" abgeleitet war).

    Die Calling-Conventions, die der Compiler unterstuetzt, sollten in der Compiler-Dokumentation beschrieben sein. Du brauchst dann nur noch diese mit denen von JNI unterstuetzten zu vergleichen.


Anmelden zum Antworten