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\n", dlerror());
return 1;
}
/* open a handle to puts function */
func = dlsym(handle, "puts");
if ((error = dlerror()) != NULL) {
fprintf(stderr, "dlsym error: %s\n", 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;
}
分享到:
相关推荐
Java Native Access (JNA) 是一个Java库,它允许Java代码与本地平台API进行交互,无需编写C语言的桥接代码或使用Java Native Interface (JNI)。JNA 提供了一种方便、高效的方式,使Java应用程序能够调用操作系统提供...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码无需编写本地代码(如C/C++)即可直接调用操作系统级别的API。JNA通过动态链接库(DLLs on Windows,shared libraries on Unix/Linux)实现了这...
在你提供的压缩包"jna整合包-jna4.5.0+jna4.0.0.rar"中,包含了两个版本的JNA库:jna-4.0.0.jar和jna-4.5.0.jar。这两个版本的差异主要体现在功能的完善和性能的优化上。JNA 4.5.0是较新的版本,相比4.0.0,它可能...
Fork the code from https://github.com/java-native-access/jna and submit pull requests. For more information on setting up a development environment see Contributing to JNA. If you are interested in...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C/C++的桥接代码。JNA通过映射Java方法到本地函数,实现了Java与操作系统底层功能的交互,极大地...
jna-4.5.1 , jna-4.5.1-sources , jna-platform-4.5.1 jar包 JNA全称Java Native Access,是一个建立在经典的JNI技术之上的Java开源框架(https://github.com/twall/jna)。JNA提供一组Java工具类用于在运行期动态...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用本机库(C、C++等)的函数,无需编写JNI(Java Native Interface)代码。JNA通过提供一种抽象层,使得Java开发者可以相对简单地与操作...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码与本地操作系统功能进行交互,无需编写C语言的动态链接库(DLL)或Java本机接口(JNI)代码。JNA提供了更简单的方式来调用操作系统API,极大地...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C语言的JNI(Java Native Interface)代码。JNA 4.1.0是该库的一个官方版本,提供了增强的功能和...
标题中的"jna-4.2.2.jar"和"jna-platform-4.2.2.jar"是Java Native Access (JNA)框架的两个关键组件的版本号为4.2.2的JAR文件。JNA是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需...
"jna" 指的是Java Native Access,而 "jna-example" 暗示了这个话题将涉及JNA的使用示例,这对于初学者或者需要深入理解JNA功能的人来说非常有价值。 **文件列表解析:** 压缩包中唯一的文件 `jna-3.0.9.jar` 应该...
* Simple example of JNA interface mapping and usage. */ public class HelloWorld { // This is the standard, stable way of mapping, which supports extensive // customization and mapping of Java to ...
### JNA 实例详解 #### 一、JNA简介与应用场景 JNA(Java Native Access)是一种能够让Java程序调用本地库(Native Libraries)的技术,它允许开发人员在不编写JNI(Java Native Interface)代码的情况下访问本地...
# 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【jna-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【jna-***.jar Maven依赖...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C语言的中间接口(JNI)。JNA通过映射Java方法到本地库中的函数,实现了Java与C/C++等本地代码的...
# 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【jna-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【jna-***.jar Maven依赖...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码与本地操作系统API进行交互,无需编写C代码或使用Java Native Interface (JNI)。JNA通过提供一种高级接口,让开发者能够轻松地调用本地库函数,...
# 【jna-***.jar中文文档.zip】 中包含: 中文文档:【jna-***-javadoc-API文档-中文(简体)版.zip】 jar包下载地址:【jna-***.jar下载地址(官方地址+国内镜像地址).txt】 Maven依赖:【jna-***.jar Maven依赖...
标题“JNA-5.8.0/JNA-PLANTFORM-5.8.0”提及的是Java Native Access (JNA)的一个版本,具体是5.8.0。JNA是一个Java库,允许Java代码直接调用操作系统API,无需编写C/C++的中间层,也就是所谓的本地方法库。这个特性...
"jna-demo.zip_DEMO_JNA demo_java jna_jna的demo_vertical6t2"是一个包含JNA使用示例的压缩包,主要用于演示如何在Java程序中调用DLL(动态链接库)文件。 在Java中,由于其跨平台性,通常不直接操作底层系统资源...