Łączenie kodu javy z kodem w c
DESCRIPTION
Jak łączyć kod w Javie z kodem w C. Opis JNA -- prostej i fajnej biblioteki.TRANSCRIPT
![Page 1: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/1.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Projekt ª¡czenie z VME
Jacek Bzdak
Wydziaª Fizyki PW
![Page 2: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/2.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Spis tre±ci
1 �¡czenie Javy i C/C++Po co nam toGranica mi¦dzy ±rodowiskami
2 Sposoby ª¡czeniaJNINowy sposóbOdwzorowaniaInne
![Page 3: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/3.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Po co nam to
Po co nam to?
Dobre powody:
Mamy jak¡± bibliotek¦ w C/C++ która na przykªadkomunikuje si¦ ze sprz¦tem i mamy w Javie ów sprz¦toprogramowa¢.
Trzeba pogada¢ z systemem operacyjnym
Zªe powody
Chcemy »eby nasz program byª szybszy. JVM jest ju» na tylewydajna »e ci¦»ko znale¹¢ kod który w C b¦dzie szybszy + s¡te» narzuty zwi¡zane z przej±ciem bariery: Java � C.
![Page 4: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/4.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Po co nam to
Po co nam to?
Dobre powody:
Mamy jak¡± bibliotek¦ w C/C++ która na przykªadkomunikuje si¦ ze sprz¦tem i mamy w Javie ów sprz¦toprogramowa¢.
Trzeba pogada¢ z systemem operacyjnym
Zªe powody
Chcemy »eby nasz program byª szybszy. JVM jest ju» na tylewydajna »e ci¦»ko znale¹¢ kod który w C b¦dzie szybszy + s¡te» narzuty zwi¡zane z przej±ciem bariery: Java � C.
![Page 5: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/5.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Po co nam to
Po co nam to?
Dobre powody:
Mamy jak¡± bibliotek¦ w C/C++ która na przykªadkomunikuje si¦ ze sprz¦tem i mamy w Javie ów sprz¦toprogramowa¢.
Trzeba pogada¢ z systemem operacyjnym
Zªe powody
Chcemy »eby nasz program byª szybszy. JVM jest ju» na tylewydajna »e ci¦»ko znale¹¢ kod który w C b¦dzie szybszy + s¡te» narzuty zwi¡zane z przej±ciem bariery: Java � C.
![Page 6: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/6.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Po co nam to
Po co nam to?
Dobre powody:
Mamy jak¡± bibliotek¦ w C/C++ która na przykªadkomunikuje si¦ ze sprz¦tem i mamy w Javie ów sprz¦toprogramowa¢.
Trzeba pogada¢ z systemem operacyjnym
Zªe powody
Chcemy »eby nasz program byª szybszy. JVM jest ju» na tylewydajna »e ci¦»ko znale¹¢ kod który w C b¦dzie szybszy + s¡te» narzuty zwi¡zane z przej±ciem bariery: Java � C.
![Page 7: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/7.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Po co nam to
Po co nam to?
Dobre powody:
Mamy jak¡± bibliotek¦ w C/C++ która na przykªadkomunikuje si¦ ze sprz¦tem i mamy w Javie ów sprz¦toprogramowa¢.
Trzeba pogada¢ z systemem operacyjnym
Zªe powody
Chcemy »eby nasz program byª szybszy. JVM jest ju» na tylewydajna »e ci¦»ko znale¹¢ kod który w C b¦dzie szybszy + s¡te» narzuty zwi¡zane z przej±ciem bariery: Java � C.
![Page 8: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/8.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica
Generalnie przej±cie mi¦dzy kodem wykonywanym napisanym wdwóch j¦zykach jest kªopotliwe wynika to z:
Mo»liwej innej reprezentacji typów wbudowanych.
Po obu stronach mog¡ istnie¢ ró»ne typy wbudowane (Java nieu»ywa typów unsigned)
Innej pami¦ciowej reprezetacji typów zªo»onych � tablice Javypami¦taj¡ swój rozmiar (rombn¡¢ mo»e si¦ te» np. bytealignment stuktur)
Ró»nego zarz¡dzania pami¦ci¡ � po stronie Javy pami¦¢ jestzarz¡dzana przez GC, po stronie C przez programiste. GC niemo»e wiedzie¢ co kod C robi z pami¦ci¡ (ten sam problem jestprzy wi¡zaniu .Net � C)
Ró»ne procesy mog¡ mie¢ ró»ne prawa dost¦pu do pami¦ci...
![Page 9: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/9.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica
Generalnie przej±cie mi¦dzy kodem wykonywanym napisanym wdwóch j¦zykach jest kªopotliwe wynika to z:
Mo»liwej innej reprezentacji typów wbudowanych.
Po obu stronach mog¡ istnie¢ ró»ne typy wbudowane (Java nieu»ywa typów unsigned)
Innej pami¦ciowej reprezetacji typów zªo»onych � tablice Javypami¦taj¡ swój rozmiar (rombn¡¢ mo»e si¦ te» np. bytealignment stuktur)
Ró»nego zarz¡dzania pami¦ci¡ � po stronie Javy pami¦¢ jestzarz¡dzana przez GC, po stronie C przez programiste. GC niemo»e wiedzie¢ co kod C robi z pami¦ci¡ (ten sam problem jestprzy wi¡zaniu .Net � C)
Ró»ne procesy mog¡ mie¢ ró»ne prawa dost¦pu do pami¦ci...
![Page 10: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/10.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica
Generalnie przej±cie mi¦dzy kodem wykonywanym napisanym wdwóch j¦zykach jest kªopotliwe wynika to z:
Mo»liwej innej reprezentacji typów wbudowanych.
Po obu stronach mog¡ istnie¢ ró»ne typy wbudowane (Java nieu»ywa typów unsigned)
Innej pami¦ciowej reprezetacji typów zªo»onych � tablice Javypami¦taj¡ swój rozmiar (rombn¡¢ mo»e si¦ te» np. bytealignment stuktur)
Ró»nego zarz¡dzania pami¦ci¡ � po stronie Javy pami¦¢ jestzarz¡dzana przez GC, po stronie C przez programiste. GC niemo»e wiedzie¢ co kod C robi z pami¦ci¡ (ten sam problem jestprzy wi¡zaniu .Net � C)
Ró»ne procesy mog¡ mie¢ ró»ne prawa dost¦pu do pami¦ci...
![Page 11: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/11.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica
Generalnie przej±cie mi¦dzy kodem wykonywanym napisanym wdwóch j¦zykach jest kªopotliwe wynika to z:
Mo»liwej innej reprezentacji typów wbudowanych.
Po obu stronach mog¡ istnie¢ ró»ne typy wbudowane (Java nieu»ywa typów unsigned)
Innej pami¦ciowej reprezetacji typów zªo»onych � tablice Javypami¦taj¡ swój rozmiar (rombn¡¢ mo»e si¦ te» np. bytealignment stuktur)
Ró»nego zarz¡dzania pami¦ci¡ � po stronie Javy pami¦¢ jestzarz¡dzana przez GC, po stronie C przez programiste. GC niemo»e wiedzie¢ co kod C robi z pami¦ci¡ (ten sam problem jestprzy wi¡zaniu .Net � C)
Ró»ne procesy mog¡ mie¢ ró»ne prawa dost¦pu do pami¦ci...
![Page 12: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/12.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica
Generalnie przej±cie mi¦dzy kodem wykonywanym napisanym wdwóch j¦zykach jest kªopotliwe wynika to z:
Mo»liwej innej reprezentacji typów wbudowanych.
Po obu stronach mog¡ istnie¢ ró»ne typy wbudowane (Java nieu»ywa typów unsigned)
Innej pami¦ciowej reprezetacji typów zªo»onych � tablice Javypami¦taj¡ swój rozmiar (rombn¡¢ mo»e si¦ te» np. bytealignment stuktur)
Ró»nego zarz¡dzania pami¦ci¡ � po stronie Javy pami¦¢ jestzarz¡dzana przez GC, po stronie C przez programiste. GC niemo»e wiedzie¢ co kod C robi z pami¦ci¡ (ten sam problem jestprzy wi¡zaniu .Net � C)
Ró»ne procesy mog¡ mie¢ ró»ne prawa dost¦pu do pami¦ci...
![Page 13: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/13.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica
Generalnie przej±cie mi¦dzy kodem wykonywanym napisanym wdwóch j¦zykach jest kªopotliwe wynika to z:
Mo»liwej innej reprezentacji typów wbudowanych.
Po obu stronach mog¡ istnie¢ ró»ne typy wbudowane (Java nieu»ywa typów unsigned)
Innej pami¦ciowej reprezetacji typów zªo»onych � tablice Javypami¦taj¡ swój rozmiar (rombn¡¢ mo»e si¦ te» np. bytealignment stuktur)
Ró»nego zarz¡dzania pami¦ci¡ � po stronie Javy pami¦¢ jestzarz¡dzana przez GC, po stronie C przez programiste. GC niemo»e wiedzie¢ co kod C robi z pami¦ci¡ (ten sam problem jestprzy wi¡zaniu .Net � C)
Ró»ne procesy mog¡ mie¢ ró»ne prawa dost¦pu do pami¦ci...
![Page 14: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/14.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica cd.
Tak na prawd¦ sprowadza si¦ to do jednej rzeczy:
Wszystkie zmienne musz¡ by¢ kopiowane przy przej±ciu zjednej strony na drug¡
Powoduje to pewne narzuty
![Page 15: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/15.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica cd.
Tak na prawd¦ sprowadza si¦ to do jednej rzeczy:
Wszystkie zmienne musz¡ by¢ kopiowane przy przej±ciu zjednej strony na drug¡
Powoduje to pewne narzuty
![Page 16: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/16.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Granica mi¦dzy ±rodowiskami
Granica cd.
Tak na prawd¦ sprowadza si¦ to do jednej rzeczy:
Wszystkie zmienne musz¡ by¢ kopiowane przy przej±ciu zjednej strony na drug¡
Powoduje to pewne narzuty
![Page 17: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/17.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
JNI
W JVM wbudowany jest mechanizm JNI (Java Native Interface).Pozwala on zadekrarowanie funkcji jako native i dostarczenie ichde�nicji w postaci skompilowanej biblioteki napisanej w C/C++.
Zalety JNI:
Jest do±¢ dobrze wyspecy�kowana i kod bibliotek JNI jestprzeno±ny mi¦dzy maszynami wirtualnymi Java.
Mo»na si¦ dogada¢ z kodem C++
![Page 18: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/18.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
JNI
W JVM wbudowany jest mechanizm JNI (Java Native Interface).Pozwala on zadekrarowanie funkcji jako native i dostarczenie ichde�nicji w postaci skompilowanej biblioteki napisanej w C/C++.Zalety JNI:
Jest do±¢ dobrze wyspecy�kowana i kod bibliotek JNI jestprzeno±ny mi¦dzy maszynami wirtualnymi Java.
Mo»na si¦ dogada¢ z kodem C++
![Page 19: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/19.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
JNI
W JVM wbudowany jest mechanizm JNI (Java Native Interface).Pozwala on zadekrarowanie funkcji jako native i dostarczenie ichde�nicji w postaci skompilowanej biblioteki napisanej w C/C++.Zalety JNI:
Jest do±¢ dobrze wyspecy�kowana i kod bibliotek JNI jestprzeno±ny mi¦dzy maszynami wirtualnymi Java.
Mo»na si¦ dogada¢ z kodem C++
![Page 20: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/20.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Wady JNI
Wady JNI:
Trzeba pisa¢ kod w C/C++
Interfejsy (by by¢ przeno±nymi) s¡ skomplikowane.
Mo»na zabi¢ JVM.
Mo»na zacz¡¢ gubi¢ pami¦¢
Przy u»ywaniu kodu Javy na wielu systemach trzeba bibliotekiJNI kompilowa¢ na wiele systemów � masakra logistyczna
![Page 21: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/21.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Wady JNI
Wady JNI:
Trzeba pisa¢ kod w C/C++
Interfejsy (by by¢ przeno±nymi) s¡ skomplikowane.
Mo»na zabi¢ JVM.
Mo»na zacz¡¢ gubi¢ pami¦¢
Przy u»ywaniu kodu Javy na wielu systemach trzeba bibliotekiJNI kompilowa¢ na wiele systemów � masakra logistyczna
![Page 22: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/22.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Wady JNI
Wady JNI:
Trzeba pisa¢ kod w C/C++
Interfejsy (by by¢ przeno±nymi) s¡ skomplikowane.
Mo»na zabi¢ JVM.
Mo»na zacz¡¢ gubi¢ pami¦¢
Przy u»ywaniu kodu Javy na wielu systemach trzeba bibliotekiJNI kompilowa¢ na wiele systemów � masakra logistyczna
![Page 23: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/23.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Wady JNI
Wady JNI:
Trzeba pisa¢ kod w C/C++
Interfejsy (by by¢ przeno±nymi) s¡ skomplikowane.
Mo»na zabi¢ JVM.
Mo»na zacz¡¢ gubi¢ pami¦¢
Przy u»ywaniu kodu Javy na wielu systemach trzeba bibliotekiJNI kompilowa¢ na wiele systemów � masakra logistyczna
![Page 24: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/24.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Wady JNI
Wady JNI:
Trzeba pisa¢ kod w C/C++
Interfejsy (by by¢ przeno±nymi) s¡ skomplikowane.
Mo»na zabi¢ JVM.
Mo»na zacz¡¢ gubi¢ pami¦¢
Przy u»ywaniu kodu Javy na wielu systemach trzeba bibliotekiJNI kompilowa¢ na wiele systemów � masakra logistyczna
![Page 25: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/25.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Wady JNI
Wady JNI:
Trzeba pisa¢ kod w C/C++
Interfejsy (by by¢ przeno±nymi) s¡ skomplikowane.
Mo»na zabi¢ JVM.
Mo»na zacz¡¢ gubi¢ pami¦¢
Przy u»ywaniu kodu Javy na wielu systemach trzeba bibliotekiJNI kompilowa¢ na wiele systemów � masakra logistyczna
![Page 26: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/26.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI � Java
Tak pogl¡dowo pisze :)Po stronie Javy:
package pkg;
class Cls {
static{
System.loadLibrary(�libName�);
}
native double f(int i, String s);
}
![Page 27: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/27.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI � C
jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (
JNIEnv *env,
jobject obj,
jint i,
jstring s){
const char *str =
( *env)->GetStringUTFChars(env, s, 0);
/* process the string */
...
/* Now we are done with str */
( *env)->ReleaseStringUTFChars(env, s, str);
return ...
}
![Page 28: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/28.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI � C
jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (
JNIEnv *env,
jobject obj,
jint i,
jstring s){
const char *str =
( *env)->GetStringUTFChars(env, s, 0);
/* process the string */
...
/* Now we are done with str */
( *env)->ReleaseStringUTFChars(env, s, str);
return ...
}
![Page 29: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/29.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI � C
jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (
JNIEnv *env,
jobject obj,
jint i,
jstring s){
const char *str =
( *env)->GetStringUTFChars(env, s, 0);
/* process the string */
...
/* Now we are done with str */
( *env)->ReleaseStringUTFChars(env, s, str);
return ...
}
![Page 30: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/30.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI � C
jdouble Java_pkg_Cls_f__ILjava_lang_String_2 (
JNIEnv *env,
jobject obj,
jint i,
jstring s){
const char *str =
( *env)->GetStringUTFChars(env, s, 0);
/* process the string */
...
/* Now we are done with str */
( *env)->ReleaseStringUTFChars(env, s, str);
return ...
}
![Page 31: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/31.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI
Generalnie zªo!
R¦cznie trzeba przepakowywa¢ wszystkie obiekty � ªatwo obª¡d zabijaj¡cy JVM
Dobieranie si¦ do pól i metod jest wymaga jeszcze wi¦kszejilo±ci kodu
Dla uczciwo±ci dodam »e:
S¡ narz¦dzia Javy pozwalaj¡ce generowa± same deklaracje tychfunkcji
S¡ narz¦dzia (pono¢) które s¡ w stanie generowa¢ caªemapowania
![Page 32: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/32.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI
Generalnie zªo!
R¦cznie trzeba przepakowywa¢ wszystkie obiekty � ªatwo obª¡d zabijaj¡cy JVM
Dobieranie si¦ do pól i metod jest wymaga jeszcze wi¦kszejilo±ci kodu
Dla uczciwo±ci dodam »e:
S¡ narz¦dzia Javy pozwalaj¡ce generowa± same deklaracje tychfunkcji
S¡ narz¦dzia (pono¢) które s¡ w stanie generowa¢ caªemapowania
![Page 33: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/33.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI
Generalnie zªo!
R¦cznie trzeba przepakowywa¢ wszystkie obiekty � ªatwo obª¡d zabijaj¡cy JVM
Dobieranie si¦ do pól i metod jest wymaga jeszcze wi¦kszejilo±ci kodu
Dla uczciwo±ci dodam »e:
S¡ narz¦dzia Javy pozwalaj¡ce generowa± same deklaracje tychfunkcji
S¡ narz¦dzia (pono¢) które s¡ w stanie generowa¢ caªemapowania
![Page 34: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/34.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI
Generalnie zªo!
R¦cznie trzeba przepakowywa¢ wszystkie obiekty � ªatwo obª¡d zabijaj¡cy JVM
Dobieranie si¦ do pól i metod jest wymaga jeszcze wi¦kszejilo±ci kodu
Dla uczciwo±ci dodam »e:
S¡ narz¦dzia Javy pozwalaj¡ce generowa± same deklaracje tychfunkcji
S¡ narz¦dzia (pono¢) które s¡ w stanie generowa¢ caªemapowania
![Page 35: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/35.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI
Generalnie zªo!
R¦cznie trzeba przepakowywa¢ wszystkie obiekty � ªatwo obª¡d zabijaj¡cy JVM
Dobieranie si¦ do pól i metod jest wymaga jeszcze wi¦kszejilo±ci kodu
Dla uczciwo±ci dodam »e:
S¡ narz¦dzia Javy pozwalaj¡ce generowa± same deklaracje tychfunkcji
S¡ narz¦dzia (pono¢) które s¡ w stanie generowa¢ caªemapowania
![Page 36: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/36.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
JNI
Kod JNI
Generalnie zªo!
R¦cznie trzeba przepakowywa¢ wszystkie obiekty � ªatwo obª¡d zabijaj¡cy JVM
Dobieranie si¦ do pól i metod jest wymaga jeszcze wi¦kszejilo±ci kodu
Dla uczciwo±ci dodam »e:
S¡ narz¦dzia Javy pozwalaj¡ce generowa± same deklaracje tychfunkcji
S¡ narz¦dzia (pono¢) które s¡ w stanie generowa¢ caªemapowania
![Page 37: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/37.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
JNA
JNA to biblioteka Javy która bardzo uªatwia wi¡zanie Javy i C.
Wady:
Obsªuguje tylko C (nie C++)
Wymaga posiadania dynamicznych bibliotek (w mojej pracyin»ynierskiej musiaªem konwertowa¢ r¦cznie statycznego libana dynamicznego)
S¡ wi¦ksze narzuty na wywoªanie � nieistotne!
![Page 38: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/38.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
JNA
JNA to biblioteka Javy która bardzo uªatwia wi¡zanie Javy i C.Wady:
Obsªuguje tylko C (nie C++)
Wymaga posiadania dynamicznych bibliotek (w mojej pracyin»ynierskiej musiaªem konwertowa¢ r¦cznie statycznego libana dynamicznego)
S¡ wi¦ksze narzuty na wywoªanie � nieistotne!
![Page 39: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/39.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
JNA
JNA to biblioteka Javy która bardzo uªatwia wi¡zanie Javy i C.Wady:
Obsªuguje tylko C (nie C++)
Wymaga posiadania dynamicznych bibliotek (w mojej pracyin»ynierskiej musiaªem konwertowa¢ r¦cznie statycznego libana dynamicznego)
S¡ wi¦ksze narzuty na wywoªanie � nieistotne!
![Page 40: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/40.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
JNA
JNA to biblioteka Javy która bardzo uªatwia wi¡zanie Javy i C.Wady:
Obsªuguje tylko C (nie C++)
Wymaga posiadania dynamicznych bibliotek (w mojej pracyin»ynierskiej musiaªem konwertowa¢ r¦cznie statycznego libana dynamicznego)
S¡ wi¦ksze narzuty na wywoªanie � nieistotne!
![Page 41: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/41.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
JNA
JNA to biblioteka Javy która bardzo uªatwia wi¡zanie Javy i C.Wady:
Obsªuguje tylko C (nie C++)
Wymaga posiadania dynamicznych bibliotek (w mojej pracyin»ynierskiej musiaªem konwertowa¢ r¦cznie statycznego libana dynamicznego)
S¡ wi¦ksze narzuty na wywoªanie � nieistotne!
![Page 42: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/42.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
Zalety
Zalety:
Zero kodu w C
Samo pilnuje pami¦ci w 90% wypadków
Umie mapowa¢ skomplikowane typy � struktury
S¡ narz¦dzia do automatycznego generowania sygnatur funkcjiw Javie. Ja ich nie lubie bo cz¦sto funkcja jest niejednoznaczna (co znaczy void *, czy int* to wska¹nik na intczy tablica?), ale ludzie u»ywaj¡ z powodzeniem.
![Page 43: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/43.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
Zalety
Zalety:
Zero kodu w C
Samo pilnuje pami¦ci w 90% wypadków
Umie mapowa¢ skomplikowane typy � struktury
S¡ narz¦dzia do automatycznego generowania sygnatur funkcjiw Javie. Ja ich nie lubie bo cz¦sto funkcja jest niejednoznaczna (co znaczy void *, czy int* to wska¹nik na intczy tablica?), ale ludzie u»ywaj¡ z powodzeniem.
![Page 44: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/44.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
Zalety
Zalety:
Zero kodu w C
Samo pilnuje pami¦ci w 90% wypadków
Umie mapowa¢ skomplikowane typy � struktury
S¡ narz¦dzia do automatycznego generowania sygnatur funkcjiw Javie. Ja ich nie lubie bo cz¦sto funkcja jest niejednoznaczna (co znaczy void *, czy int* to wska¹nik na intczy tablica?), ale ludzie u»ywaj¡ z powodzeniem.
![Page 45: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/45.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
Zalety
Zalety:
Zero kodu w C
Samo pilnuje pami¦ci w 90% wypadków
Umie mapowa¢ skomplikowane typy � struktury
S¡ narz¦dzia do automatycznego generowania sygnatur funkcjiw Javie. Ja ich nie lubie bo cz¦sto funkcja jest niejednoznaczna (co znaczy void *, czy int* to wska¹nik na intczy tablica?), ale ludzie u»ywaj¡ z powodzeniem.
![Page 46: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/46.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Nowy sposób
Zalety
Zalety:
Zero kodu w C
Samo pilnuje pami¦ci w 90% wypadków
Umie mapowa¢ skomplikowane typy � struktury
S¡ narz¦dzia do automatycznego generowania sygnatur funkcjiw Javie. Ja ich nie lubie bo cz¦sto funkcja jest niejednoznaczna (co znaczy void *, czy int* to wska¹nik na intczy tablica?), ale ludzie u»ywaj¡ z powodzeniem.
![Page 47: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/47.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Odwzorowania � typy proste
C java C java
byte/unsigned byte byte struct Structureint/unisgned int int whatever* Pointer
long/unsigned long NativeLong array java array�oat/double �oat/double by reverence xxxByReference
![Page 48: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/48.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 49: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/49.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 50: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/50.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 51: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/51.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 52: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/52.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 53: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/53.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 54: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/54.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Mapowanie nazw funkcji
C czasem dekoruje nazwy funkcji. Na przykªad z foo potra�zrobi¢ @foo@64, gdzie 64 to dªugo±¢ pami¦ci zajmowanej przezargumenty
�eby wywoªa¢ funkcje musimy mie¢ jej udekorowan¡ nazwe.
JNI radzi sobie z tym za pomoc¡ rozwi¡za« C
JNA ma do tego mechanizm FunctionMapper � to jest takieco± co dostaje java.re�ect.Method i ma z tego zgadn¡¢ nazw¦metody w C
S¡ implementacje FunctionMappera na wi¦szko±¢ dekoracji nawi¦kszo±¢ systemów
Najlepiej (jak si¦ da) wyª¡czy¢ dekorowanie
Mo»na u»y¢ FunctionMappera do tego »eby pozby¢ si¦ tychdziwnych pre�xów funkcji. Np. SADGetParameter
![Page 55: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/55.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Kod JNA
static{
Native.register(CaenUtils.createNativeLib());
}
public native int Init(int BdType, short link,
short bdNum, IntByReference handle);
public native int WriteCycle(int handle,
int address, byte[] data)
public int ReadCycle(int handle,
int address,
IntByReference data)
![Page 56: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/56.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Kod JNA
static{
Native.register(CaenUtils.createNativeLib());
}
public native int Init(int BdType, short link,
short bdNum, IntByReference handle);
public native int WriteCycle(int handle,
int address, byte[] data)
public int ReadCycle(int handle,
int address,
IntByReference data)
![Page 57: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/57.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Kod JNA
static{
Native.register(CaenUtils.createNativeLib());
}
public native int Init(int BdType, short link,
short bdNum, IntByReference handle);
public native int WriteCycle(int handle,
int address, byte[] data)
public int ReadCycle(int handle,
int address,
IntByReference data)
![Page 58: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/58.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Kod JNA
static{
Native.register(CaenUtils.createNativeLib());
}
public native int Init(int BdType, short link,
short bdNum, IntByReference handle);
public native int WriteCycle(int handle,
int address, byte[] data)
public int ReadCycle(int handle,
int address,
IntByReference data)
![Page 59: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/59.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Kod JNA2
public static Map<String, Object> createLibOptions(){
Map<String, Object> result = (...)
result.put(Library.OPTION_FUNCTION_MAPPER,
new CaenFunctionMapper());
return result;
}
public static NativeLibrary createNativeLib(){
return NativeLibrary.getInstance("CAENVME",
createLibOptions());
}
![Page 60: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/60.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Kod JNA2
public static Map<String, Object> createLibOptions(){
Map<String, Object> result = (...)
result.put(Library.OPTION_FUNCTION_MAPPER,
new CaenFunctionMapper());
return result;
}
public static NativeLibrary createNativeLib(){
return NativeLibrary.getInstance("CAENVME",
createLibOptions());
}
![Page 61: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/61.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Zarz¡dzanie pami¦ci¡
Jak pisaªem � przy przej±ciu przez granic¦ pami¦c jestkopiowana
Pami¦¢ allokowana przez JNA jest kasowana przy wyj±ciu zfunkcji. W 90% wypadków jest to porz¡dana cecha.
Mo»na u»y¢ klasy Memory by przekaza¢ do kodu natywnegopami¦¢ która b¦dzie zaalokowana a» dana instancja Memorynie tra� do GC.
![Page 62: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/62.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Zarz¡dzanie pami¦ci¡
Jak pisaªem � przy przej±ciu przez granic¦ pami¦c jestkopiowana
Pami¦¢ allokowana przez JNA jest kasowana przy wyj±ciu zfunkcji. W 90% wypadków jest to porz¡dana cecha.
Mo»na u»y¢ klasy Memory by przekaza¢ do kodu natywnegopami¦¢ która b¦dzie zaalokowana a» dana instancja Memorynie tra� do GC.
![Page 63: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/63.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Zarz¡dzanie pami¦ci¡
Jak pisaªem � przy przej±ciu przez granic¦ pami¦c jestkopiowana
Pami¦¢ allokowana przez JNA jest kasowana przy wyj±ciu zfunkcji. W 90% wypadków jest to porz¡dana cecha.
Mo»na u»y¢ klasy Memory by przekaza¢ do kodu natywnegopami¦¢ która b¦dzie zaalokowana a» dana instancja Memorynie tra� do GC.
![Page 64: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/64.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Mamy funkcje
void writeToMem(void *, int)
Odwzorowan¡ na:
void writeMem(byte[], int)
i wywoªan¡:
byte[] res = new byte[256]
writeMem(res, 256)
![Page 65: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/65.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Mamy funkcje
void writeToMem(void *, int)
Odwzorowan¡ na:
void writeMem(byte[], int)
i wywoªan¡:
byte[] res = new byte[256]
writeMem(res, 256)
![Page 66: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/66.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Mamy funkcje
void writeToMem(void *, int)
Odwzorowan¡ na:
void writeMem(byte[], int)
i wywoªan¡:
byte[] res = new byte[256]
writeMem(res, 256)
![Page 67: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/67.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Co si¦ dzieje z pami¦ci¡:
Po stronie Javy allokujemy 256 bajtów
Tworzona jest tablica C o dªugo±ci 256 (dªugo±¢ brana z polalength)
przekazywana ona jest do funkcji C
po wykonaniu funkcji zawarto±¢ tablicy z C kopiowana jest dotablicy Java
Tablica C jest kasowana
![Page 68: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/68.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Co si¦ dzieje z pami¦ci¡:
Po stronie Javy allokujemy 256 bajtów
Tworzona jest tablica C o dªugo±ci 256 (dªugo±¢ brana z polalength)
przekazywana ona jest do funkcji C
po wykonaniu funkcji zawarto±¢ tablicy z C kopiowana jest dotablicy Java
Tablica C jest kasowana
![Page 69: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/69.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Co si¦ dzieje z pami¦ci¡:
Po stronie Javy allokujemy 256 bajtów
Tworzona jest tablica C o dªugo±ci 256 (dªugo±¢ brana z polalength)
przekazywana ona jest do funkcji C
po wykonaniu funkcji zawarto±¢ tablicy z C kopiowana jest dotablicy Java
Tablica C jest kasowana
![Page 70: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/70.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Co si¦ dzieje z pami¦ci¡:
Po stronie Javy allokujemy 256 bajtów
Tworzona jest tablica C o dªugo±ci 256 (dªugo±¢ brana z polalength)
przekazywana ona jest do funkcji C
po wykonaniu funkcji zawarto±¢ tablicy z C kopiowana jest dotablicy Java
Tablica C jest kasowana
![Page 71: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/71.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Co si¦ dzieje z pami¦ci¡:
Po stronie Javy allokujemy 256 bajtów
Tworzona jest tablica C o dªugo±ci 256 (dªugo±¢ brana z polalength)
przekazywana ona jest do funkcji C
po wykonaniu funkcji zawarto±¢ tablicy z C kopiowana jest dotablicy Java
Tablica C jest kasowana
![Page 72: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/72.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Przykªad
Co si¦ dzieje z pami¦ci¡:
Po stronie Javy allokujemy 256 bajtów
Tworzona jest tablica C o dªugo±ci 256 (dªugo±¢ brana z polalength)
przekazywana ona jest do funkcji C
po wykonaniu funkcji zawarto±¢ tablicy z C kopiowana jest dotablicy Java
Tablica C jest kasowana
![Page 73: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/73.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Problemy z JNA
Jest problem z unsigned byte
Czasem trzeba pilnowa¢ byte alignmentu struktur
Uwa»a¢ na w¡tki (jak w JNI)!
![Page 74: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/74.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Problemy z JNA
Jest problem z unsigned byte
Czasem trzeba pilnowa¢ byte alignmentu struktur
Uwa»a¢ na w¡tki (jak w JNI)!
![Page 75: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/75.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Problemy z JNA
Jest problem z unsigned byte
Czasem trzeba pilnowa¢ byte alignmentu struktur
Uwa»a¢ na w¡tki (jak w JNI)!
![Page 76: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/76.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Wydajno±¢
Autorzy mówi¡ »e wydajno±¢ zaprezentowanej metodywywoªywania funckcji jest 2 - 3 razy mniejsza ni» dla JNI.
Dotyczy to narzutu na wywoªanie funkcji, samo wykonaniefunkcji jest tak samo szybkie :) Dla dªugo trwaj¡cych funkcjinarzut jest nieistotny.
Jest druga metoda wywoªywania (historycznie wcze±niejsza)maj¡ca narzut wi¦kszy o rz¡d wielko±ci. Ale s¡ rzeczy zktórymi pierwsza metoda sobie nie radzi (do±¢ egzotyczne �np. tablice wska¹ników)
Nie zauwa»yªem wielkiego wpªywu tego narzutu na wykonanie.Kiedy gadamy ze sprz¦tem i tak najwolniejsza jest samakomunikacja.
![Page 77: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/77.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Wydajno±¢
Autorzy mówi¡ »e wydajno±¢ zaprezentowanej metodywywoªywania funckcji jest 2 - 3 razy mniejsza ni» dla JNI.
Dotyczy to narzutu na wywoªanie funkcji, samo wykonaniefunkcji jest tak samo szybkie :) Dla dªugo trwaj¡cych funkcjinarzut jest nieistotny.
Jest druga metoda wywoªywania (historycznie wcze±niejsza)maj¡ca narzut wi¦kszy o rz¡d wielko±ci. Ale s¡ rzeczy zktórymi pierwsza metoda sobie nie radzi (do±¢ egzotyczne �np. tablice wska¹ników)
Nie zauwa»yªem wielkiego wpªywu tego narzutu na wykonanie.Kiedy gadamy ze sprz¦tem i tak najwolniejsza jest samakomunikacja.
![Page 78: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/78.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Wydajno±¢
Autorzy mówi¡ »e wydajno±¢ zaprezentowanej metodywywoªywania funckcji jest 2 - 3 razy mniejsza ni» dla JNI.
Dotyczy to narzutu na wywoªanie funkcji, samo wykonaniefunkcji jest tak samo szybkie :) Dla dªugo trwaj¡cych funkcjinarzut jest nieistotny.
Jest druga metoda wywoªywania (historycznie wcze±niejsza)maj¡ca narzut wi¦kszy o rz¡d wielko±ci. Ale s¡ rzeczy zktórymi pierwsza metoda sobie nie radzi (do±¢ egzotyczne �np. tablice wska¹ników)
Nie zauwa»yªem wielkiego wpªywu tego narzutu na wykonanie.Kiedy gadamy ze sprz¦tem i tak najwolniejsza jest samakomunikacja.
![Page 79: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/79.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Odwzorowania
Wydajno±¢
Autorzy mówi¡ »e wydajno±¢ zaprezentowanej metodywywoªywania funckcji jest 2 - 3 razy mniejsza ni» dla JNI.
Dotyczy to narzutu na wywoªanie funkcji, samo wykonaniefunkcji jest tak samo szybkie :) Dla dªugo trwaj¡cych funkcjinarzut jest nieistotny.
Jest druga metoda wywoªywania (historycznie wcze±niejsza)maj¡ca narzut wi¦kszy o rz¡d wielko±ci. Ale s¡ rzeczy zktórymi pierwsza metoda sobie nie radzi (do±¢ egzotyczne �np. tablice wska¹ników)
Nie zauwa»yªem wielkiego wpªywu tego narzutu na wykonanie.Kiedy gadamy ze sprz¦tem i tak najwolniejsza jest samakomunikacja.
![Page 80: Łączenie kodu Javy z kodem w C](https://reader038.vdocuments.pub/reader038/viewer/2022102901/5571f76f49795991698b63e1/html5/thumbnails/80.jpg)
�¡czenie Javy i C/C++ Sposoby ª¡czenia
Inne
Inne narz¦dzia
SWIG � pozwala si¦ ª¡czy¢ z kodem napisanym w podzbiorzeC++ (nie lubi szablonów)
CORBA i inne podobne � ale to zªo. Zªo i jeszcze raz zuo.
S¡ te» pªatne rozwi¡znia