2016-04-16 11 views
0

Ich lernte JNI vor kurzem. Ich habe eine native Methode in eine Java-Datei geschrieben und die Header-Datei nach dem Kompilieren der Java-Datei mit javah.exe erhalten. Dann schrieb ich eine CPP-Datei und kompilierte sie in eine DLL-Datei mit code :: blocks. Ich habe das Java-Programm ausgeführt, aber einen Fehler erhalten: java error.Wie "@ 8" Suffix in DLL-Datei entfernen

enter image description here

Also öffnete ich die DLL-Datei mit DLL Export Viewer, und stellte fest, dass die dort ein "@ 8" Suffix in Funktionsnamen war. suffix @8. Ich dachte, das war der Grund, warum meine Java-Datei nicht normal laufen konnte. Kann jemand das Suffix "@ 8" im Funktionsnamen entfernen?

+0

warum knacken Sie gerade die eigene dll ?? Überprüfen Sie, ob etwas falsch ist, wenn Sie stattdessen die Schnittstellen deklarieren. –

+0

Zeigen Sie uns den C++ - Quellcode. Höchstwahrscheinlich haben Sie mit der Aufrufkonvention Ihrer 'sayHello'-Funktion etwas falsch gemacht. Es sollte C-like (auch "cdecl" genannt) sein, nicht Pascal-like (auch "stdcall" genannt). Siehe http://stackoverflow.com/questions/20790001/jni-does-not-work-with-stdcall –

+0

Ja, ich habe den Java-Code, Header-Datei und CPP-Datei für viele Male überprüft. Ich habe viele Informationen über diesen Fehler gesucht, bevor Sie gefragt haben, und sie sagten, dass es der Funktionsname ist, der zu dem Fehler führt, aber dit gibt die Lösung nicht. –

Antwort

0

Wenn Sie mit GCC kompilieren, geben Sie einfach --kill-at und Ihr Problem wird so gehen. Für MSVC, siehe here.

+0

Sie bieten eine andere Lösung für mein Problem. Vielen Dank! –