(1) char类型
Java里的Char是双字节的,对应C的类型是wchar_t!要对应c的char类型可以用byte
(2) 字符串处理
const char*类型官方建议直接对应String类型,实际应用时对中文的编码问题老是处理不好!所以我这边用byte[]进行对应传入字符串时手工加个'\0',如:
str=str+"\0" ;fun(str.getBytes("Gb2312"));
(3) 结构体处理
结构体指针参数:
typedef struct _Point {
int x, y;
} Point;
Point* translate(Point* pt, int dx, int dy);
// Equivalent JNA mapping
class Point extends Structure { public int x, y; }
Point translate(Point pt, int x, int y);
...
Point pt = new Point();
Point result = translate(pt, 100, 100);
结构体参数或结构体返回值
typedef struct _Point {
int x, y;
} Point;
Point translate(Point pt, int dx, int dy);
// Equivalent JNA mapping
class Point extends Structure {
public static class ByValue extends Point implements Structure.ByValue { }
public int x, y;
}
Point.ByValue translate(Point.ByValue pt, int x, int y);
...
Point.ByValue pt = new Point.ByValue();
Point result = translate(pt, 100, 100);
结构体数组参数
// Original C code
void get_devices(struct Device[], int size);
// Equivalent JNA mapping
int size = ...
Device[] devices = new Device[size];
lib.get_devices(devices, devices.length);
返回结构体数组(指针)
// Original C code
struct Display* get_displays(int* pcount);
void free_displays(struct Display* displays);
// Equivalent JNA mapping
Display get_displays(IntByReference pcount);
void free_displays(Display[] displays);
...
IntByReference pcount = new IntByReference();
Display d = lib.get_displays(pcount);
Display[] displays = (Display[])d.toArray(pcount.getValue());
...
lib.free_displays(displays);
JNA管方地址: http://jna.java.net/
文档地址: http://jna.java.net/javadoc/overview-summary.html
分享到:
相关推荐
java使用jna开启关闭第三方应用程序,附简单的例子,打开一个记事本,朋友们也可以改为自己需要打开的应用程序
JNA通过动态链接库(DLLs on Windows,shared libraries on Unix/Linux)实现了这一点,极大地简化了Java应用程序与本地资源的交互。`jna.jar`文件是JNA库的核心组件,包含了所有必要的类和资源,使得开发者可以在...
在实际应用中,`jna-platform.jar`包含了大量预先定义好的平台特定函数,比如Windows的kernel32.dll、user32.dll库,或者Unix的libc库等。这样,开发者可以直接引用这些预定义的类和方法,而不需要手动编写映射代码...
**JNA.jar与实例应用** Java Native Access (JNA) 是Java平台上的一个库,它允许Java代码直接调用本地(操作系统级)函数,而无需编写C代码或使用Java Native Interface (JNI)。JNA.jar是JNA的核心库,包含了JNA的...
在你提供的压缩包"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,它可能...
JNA通过映射Java方法到本地函数,实现了Java与操作系统底层功能的交互,极大地简化了在Java应用中使用系统API或DLL库的过程。在这个场景中,我们有两个文件:`jna-3.3.0.jar`和`jna-3.3.0-platform.jar`,它们分别是...
#### 一、JNA简介与应用场景 JNA(Java Native Access)是一种能够让Java程序调用本地库(Native Libraries)的技术,它允许开发人员在不编写JNI(Java Native Interface)代码的情况下访问本地库。JNA通过反射机制...
JNA提供了更简单的方式来调用操作系统API,极大地简化了Java应用程序与本地系统资源的集成过程。 JNA-5.7.0是JNA库的一个版本更新,它包含了对不同操作系统平台的广泛支持,包括Windows、Linux、macOS等。这个版本...
1. **性能提升**:每个新版本通常都会进行性能优化,包括更快的函数调用、更有效的内存管理等,使得Java应用在调用本机函数时效率更高。 2. **新功能支持**:新版本可能会增加对新的操作系统特性或库的支持,比如新...
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 调用dll工具jar,2积分分享”,暗示了JNA的一个主要应用场景:通过Java调用动态链接库(DLL)文件。在Windows系统中,DLL文件包含了可被多个程序共享的函数和资源,JNA允许Java程序加载并使用...
本文将详细介绍JNA 4.4.0版本及其在Java调用DLL中的应用。 1. JNA基本原理 JNA通过一个映射机制,将Java方法与本地库的函数进行对应。Java端定义一个接口,这个接口的实现由JNA在运行时自动完成,从而调用到对应的...
- 虽然JNA简化了本地调用,但并不适用于所有情况,对于性能要求极高的应用,JNI可能仍然是更好的选择。 - 在调用本地库时,确保了解库的函数签名,以正确地在Java接口中定义它们。 - 调试JNA问题可能会有些复杂,...
这个“jna小例子”可能是一个示例项目,展示了如何使用JNA与C或C++编写的DLL(动态链接库)进行交互。下面将详细阐述JNA的相关知识点。 ### JNA简介 JNA提供了一种方便的机制,使得Java程序可以无缝地访问本地库中...
Java Native Access(JNA)是Java平台上的一个开源库,它允许Java代码直接调用操作系统提供的原生函数,而无需编写C语言的JNI(Java Native Interface)代码。JNA 4.1.0是该库的一个官方版本,提供了增强的功能和...
《JNA技术详解与实战应用》 Java Native Access(JNA)是Java平台上的一个库,它为Java程序员提供了一种直接访问操作系统本地API的机制,而无需编写C/C++的桥接代码或使用Java的JNI(Java Native Interface)。这个...
在实际应用中,`mydll.dll`库需要放置在系统路径、项目类路径或指定的目录下,以确保JNA能成功加载。对于Windows系统,通常将DLL放在`System32`目录或应用的运行目录。 在描述中提到的博客文章...
对于性能敏感的应用,可能需要权衡易用性和性能,考虑是否采用JNI。 9. **平台兼容性**:`jna-platform.jar`确保了JNA在不同操作系统上的兼容性。它包含了各种平台特有的API映射,如Windows API、Unix系统调用等。 ...
Java Native Access(JNA)是Java平台上的一个开源库,它...总的来说,"jna-demo"这个项目是学习和理解如何在Java中利用JNA调用本地DLL文件的理想资源,它将帮助开发者深入理解JNA的工作机制,并提供实际应用中的参考。
标题中的"jna-3.0.9.jar和examples.jar"是两个重要的Java类库文件,它们在IT领域,特别是Java开发中具有显著的应用价值。JNA(Java Native Access)是一个开源项目,它提供了一种方便的方式来调用本地库(如C、C++...