六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 29|回复: 0

JNA 应用小结

[复制链接]

升级  12.67%

17

主题

17

主题

17

主题

秀才

Rank: 2

积分
69
 楼主| 发表于 2013-1-26 14:08:23 | 显示全部楼层 |阅读模式
 
(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
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表