JNA and libffi

1571 단어 JNA
JNA make it easy to call native code from Java. For a given function defined in 
JNA way. JNA first gets the handle to the function from native shared library.  
Then it uses libffi to call the function.
 
libffi make it possible to call native function dynamically.
 
#include <stdio.h>
#include <ffi.h>
#include <dlfcn.h>

int main()
{
  ffi_cif cif;
  ffi_type *args[1];
  void *values[1];
  char *s;
  int rc;
  void *handle;
  void *func;
  char *error;

  /* open a handle to the library */
  handle = dlopen("/lib/libc.so.6", RTLD_LAZY);
  if (!handle) {
    fprintf(stderr, "dlopen error: %s
", dlerror()); return 1; } /* open a handle to puts function */ func = dlsym(handle, "puts"); if ((error = dlerror()) != NULL) { fprintf(stderr, "dlsym error: %s
", error); return 1; } /* Initialize the argument info vectors */ args[0] = &ffi_type_pointer; values[0] = &s; /* Initialize the cif */ if (ffi_prep_cif(&cif, FFI_DEFAULT_ABI, 1, &ffi_type_uint, args) == FFI_OK) { s = "Hello World!"; ffi_call(&cif, func, &rc, values); s = "This is cool!"; ffi_call(&cif, func, &rc, values); } dlclose(handle); return 0; }

좋은 웹페이지 즐겨찾기