This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:reflection [2015/01/05 13:06] cosmin.boaca [Exerciții] |
laboratoare:reflection [2015/01/07 00:28] (current) cosmin.boaca [Java Native Interface (JNI)] |
||
|---|---|---|---|
| Line 19: | Line 19: | ||
| <code java NativeMethodDeclaration.java> | <code java NativeMethodDeclaration.java> | ||
| - | private int native_add(int num1, int num2); | + | package laborator; |
| + | |||
| + | class NativeTest { | ||
| + | private int nativeAdd(int num1, int num2); | ||
| + | } | ||
| </code> | </code> | ||
| - | Declararea și definirea funcției in C este ceva mai complicată și nu va fi prezentată. | + | Functia in C/C++ trebuie sa aiba urmatoarea definite |
| + | |||
| + | <code C> | ||
| + | extern "C" { | ||
| + | Java_laborator_NativeTest_nativeAdd(JNIEnv *env, JObject obj, Jint a, Jint b) { | ||
| + | return a + b; | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | Numele metodei in C derivă din numele fully qualified al metodei din Java. (nume_pachet.nume_clasa.nume_metoda). Pentru metoda de mai sus, acest nume este laborator.NativeTest.nativeAdd. | ||
| + | Numele metodei din C se formeaza prin concatenarea Java_ la numele metodei în care . este inlocuit cu _ . | ||
| + | Metoda va fi compilată într-o bibliotecă partajată (shared_library) cu linking de C (extern "C"), acest lucru fiind necesar pentru a putea fi găsită corect din Java. | ||
| ==Reflection== | ==Reflection== | ||