`
tcspecial
  • 浏览: 911570 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JNA修改结构体

    博客分类:
  • java
阅读更多

   JNA返回结构体:
   在C++中返回一个大结构体比较耗资源的,不可取.一般可以通过传入指针或变量引用值, 在方法中修改达到返回结果的目的。
   java对象默认的是传地址引用,那么我们就可以在C中修改java对象后返回,减少对象传递时的性能损耗。

 

// 结构体定义
typedef struct _Point
{
	int x;
	int y;
}Point;

/**
 *方式一: 在C中传入结构体指针
 */
JNAAPI bool translate( Point *pt,int dx,int dy )
{
	pt->x=pt->x+dx;
	pt->y=pt->y+dy;
	return true;
}

/**
 *方式二: 在C中传入结构体引用
 */
JNAAPI bool translate( Point &pt,int dx,int dy )
{
	pt.x=pt.x+dx;
	pt.y=pt.y+dy;
	return true;
}

// Java代码
Point point=new Point();
point.x=20;
point.y=20;
JNALib.INSTANCE.translate(point, 10, 10);
System.out.println("Source: "+point.x+"\t"+point.y);
// 输出结果: 30 30

 

 

分享到:
评论

相关推荐

    调用DLL的jna-4.5.0版本

    - 在处理结构体或复杂数据类型时,可能需要使用JNA的结构体映射功能。 - 调试时,考虑使用JNA的调试模式,以便查看JNA生成的本地调用信息。 6. **JNA与JNI对比**: - JNI需要编写C/C++代码,而JNA只需在Java中...

    jna3.2.1.rar

    对于复杂类型,如结构体,JNA也支持自定义映射。 3. **回调函数**:JNA支持从本地代码调用Java方法,这被称为“回调”。通过`com.sun.jna.Function`类和`com.sun.jna.Native`类的`setCallback`方法,可以注册Java...

    jna和examples.zip

    对于复杂类型,如结构体,JNA提供了一系列的类型映射类,如Structure和Union。 二、JNA使用步骤 1. 定义接口:首先,创建一个Java接口,声明需要调用的本地函数。 ```java public interface User32 extends ...

    Java通过JNA调用系统API

    通过理解JNA的工作原理,以及如何定义接口和结构体来映射原生函数,你可以轻松地在Java中调用`Kernel32.dll`或其他系统库中的函数。记住,合理使用并注意安全性和性能优化,是成功使用JNA的关键。

    JNA的相关jarbao

    JNA提供了一种简单的方法来调用操作系统API,以及访问内存和处理系统级结构体。这个压缩包包含两个重要的JNA相关jar文件:`jna.jar`和`platform.jar`。 `jna.jar`是JNA的核心库,其中包含了JNA的主接口和实现。它...

    JNA调用VC++dll

    2. **结构体指针**:在C/C++中,结构体是数据组合的一种方式,而在JNA中,可以通过`Structure`类来处理结构体。你可以定义一个Java类继承自`Structure`,然后映射对应的C结构体字段。JNA会自动处理内存分配和布局,...

    jna jar实现java调用dll

    JNA还支持数据类型的映射,如基本类型、数组、结构体等,以及更复杂的数据交互。它还提供了回调功能,使得DLL可以调用Java方法。 总的来说,JNA提供了一种高效且简洁的方式来连接Java和本地代码,使得Java开发者...

    JNA初识

    2. **结构体和联合**:JNA支持自定义结构体和联合类型,以便与本地库中复杂的数据结构交互。 3. **回调函数**:JNA可以处理Java方法作为本地函数的回调,使得Java代码可以作为本地库的事件处理器。 4. **指针处理*...

    java用JNA调用dll实例,包含各种参数调用

    在本实例中,我们看到如何利用JNA调用DLL(动态链接库)函数,并传递各种类型的参数,包括基本数据类型、指针、引用、结构体、函数指针以及字符串和数组。 首先,理解JNA的基本工作原理是至关重要的。JNA通过映射...

    JNAUnixSocket:修改JUnixSocket项目以在Java中简单地使用Unix Domain Socket

    本文将深入探讨如何通过修改JUnixSocket项目,使用Java Native Access (JNA) 来实现更简单的Unix Domain Socket通信。 首先,JNA是Java平台上的一个库,它允许Java程序直接调用系统库,而无需编写C代码或使用JNI。...

Global site tag (gtag.js) - Google Analytics