JNA 应用小结

 

(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值