JNA: рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреЙрд▓рдмреИрдХ

рдореБрдЭреЗ рдЕрдкрдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЬрд╛рд╡рд╛ рдореЗрдВ рдкреБрд░рд╛рдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рд╕реА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдерд╛ рдХрд┐ рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕реЗ рдХрд╛рдо рдХреЗ рджреМрд░рд╛рди рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЬрд┐рд╕реЗ рдореИрдВ рдЬрд╛рд╡рд╛ рдкрдХреНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред



рдЬреЗрдПрдирдЖрдИ рдЖрдкрдХреЛ рдпрд╣ рд╕рдм рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдбрд░рдкреЛрдХред рдЬреЗрдПрдирдЖрдИ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрджреНрднреБрдд рдЬреЗрдПрдирдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЬреЗрдПрдирдП рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЕрдм рдЦрд╛рд▓реА рд╣реИ - рд╡реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬреЗрдПрдирдП рд▓реЗрдЦ рдХреЙрд▓рдмреИрдХ рдирд╣реАрдВ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЫреЗрдбрд╝рдЫрд╛рдбрд╝ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред



рдореИрдВ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХреЛ рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ - рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЛред



C рд╕реЗ рд╢реБрд░реВ:



my.h

typedef void (*callback)(char *, char*); int myfunc(char *); void registerCallback(callback myc);
      
      







my.c

 #include <string.h> #include "my.h" static callback c; int myfunc(char *name) { (*c)("received", name); return strlen(name); } void registerCallback(callback myc) { c = myc; }
      
      







рд╣рдо рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╣реИрдВ:

  gcc -c -fPIC -m32 -g my.c -omy.o
 gcc -m32 -sared -g my.o -o/libmy.so 




рдФрд░ рдЬрд╣рд╛рдВ LD_LIBRARY_PATH рдЕрдВрдХ рдбрд╛рд▓рддреЗ рд╣реИрдВ



рд╣рдо рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдЬреЛ рд╣рдорд╛рд░реА рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ:



MyCallBack.java

 import com.sun.jna.Callback; public class MyCallBack implements Callback { public void callback (String param1, String param2) { System.out.println(param1+" "+param2); } }
      
      







MyLib.java

 import com.sun.jna.Library; public interface MyLib extends Library { int myfunc(String name); void registerCallback(MyCallBack myc); }
      
      







рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИ! JNI рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХреЛрдИ рдЕрдЬреАрдм рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдпрд╛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓ рдкреАрдврд╝реА рдирд╣реАрдВ!



рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:



 import com.sun.jna.Native; public class App { public static void main(String[] args) { MyLib lib = (MyLib) Native.loadLibrary("my", MyLib.class); lib.registerCallback(new MyCallBack()); System.out.println(lib.myfunc("test1")); } }
      
      







рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдЕрдкреНрд░рд┐рдп рд╣реИ, рдУрд╣, рдХрд┐ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рд╡рд┐рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЕрдЧрд░ рдореЗрд░реЗ рдкрд╛рд╕ рджрд╕ рдХреЙрд▓рдмреИрдХ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдРрд╕реА рджрд╕ рдХрдХреНрд╖рд╛рдПрдВ рдмрдирд╛рдиреЗ (рдФрд░ рдкрдВрдЬреАрдХрд░рдг) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рдЬрд╛рд╡рд╛ рд╡рд░реНрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддрд░реНрдХ рд╣реЛрдЧрд╛ - рдпрд╣ рдХреЙрд▓рдмреИрдХ рдХреЗ рд▓рд┐рдП рдХрдИ рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓реЗрдЧрд╛ рдФрд░ рдХреЙрд▓рдмреИрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рд╡рд░реНрдЧреЛрдВ рдХреА рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕реЗ "рдЯреНрд░рд╛рдВрд╕рд▓реЗрдЯ" рдХрд░реЗрдЧрд╛ред



рдпреБрдкреАрдбреА:

LJ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ letu4i рд▓рд┐рдЦрддреЗ рд╣реИрдВ:

рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдЬреЗрдПрдирдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЬреЗрд╡реАрдПрдо рдореЗрдВ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, JNA рдкрд░ рдЕрддреНрдпрдзрд┐рдХ рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рдХрд╛рд░рдг рдХреИрд╕рдВрдбреНрд░рд╛ рдореЗрдВ рдПрдХ рдмрдЧ рдерд╛:



issues.apache.org/jira/browse/CASSANDRA-1760



рдпрджрд┐ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрд╕реНрд╡реАрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рд╕рд╛рд╡рдзрд╛рдиреА рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

PS A рдмрдЧ JRockit JVM рдкрд░ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛




All Articles