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== |