Łączenie kodu Javy z kodem w C

80

description

Jak łączyć kod w Javie z kodem w C. Opis JNA -- prostej i fajnej biblioteki.

Transcript of Łączenie kodu Javy z kodem w C

Page 1: Łączenie kodu Javy z kodem w C

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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

�¡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