2010-03-07 98 views
0

我正在为ZBar(library for bar code reader)创建Java接口JNAJNA和ZBar(条码阅读器库)

在JNA中,需要声明C中的结构。例如::

// In C 
typedef struct { 
    char* id; 
    char* name; 
    int age; 
    char* sectionId 
} EMPLOYEE; 

// In Java with JNA 
public static class Employee extends Structure { // com.sun.jna.Structure 
    String id; 
    String name; 
    int age; 
    String sectionId; 
} 

但在zbar和结构没有成员。例如::

// zbar-0.10/include/zbar.h 
// line:1009-1011 
struct zbar_image_scanner_s; 
/** opaque image scanner object. */ 
typedef struct zbar_image_scanner_s zbar_image_scanner_t; 

那不声明大小或结构的成员。

如何在JNA中为这些结构编写接口?

回答

0

的结构zbar_image_scanner_s声明中img_scanner.c为:

/* image scanner state */ 
struct zbar_image_scanner_s { 
    zbar_scanner_t *scn;  /* associated linear intensity scanner */ 
    zbar_decoder_t *dcode;  /* associated symbol decoder */ 
#ifdef ENABLE_QRCODE 
    qr_reader *qr;    /* QR Code 2D reader */ 
#endif 

    const void *userdata;  /* application data */ 
    /* user result callback */ 
    zbar_image_data_handler_t *handler; 

    unsigned long time;   /* scan start time */ 
    zbar_image_t *img;   /* currently scanning image *root* */ 
    int dx, dy, du, umin, v; /* current scan direction */ 
    zbar_symbol_set_t *syms; /* previous decode results */ 
    /* recycled symbols in 4^n size buckets */ 
    recycle_bucket_t recycle[RECYCLE_BUCKETS]; 

    int enable_cache;   /* current result cache state */ 
    zbar_symbol_t *cache;  /* inter-image result cache entries */ 

    /* configuration settings */ 
    unsigned config;   /* config flags */ 
    int configs[NUM_SCN_CFGS]; /* int valued configurations */ 

#ifndef NO_STATS 
    int stat_syms_new; 
    int stat_iscn_syms_inuse, stat_iscn_syms_recycle; 
    int stat_img_syms_inuse, stat_img_syms_recycle; 
    int stat_sym_new; 
    int stat_sym_recycle[RECYCLE_BUCKETS]; 
#endif 
}; 

不知道你的设置(即:ENABLE_QRCODE,NO_STATS等)进行编译;我将把c转换成jna结构转换,但是https://jna.dev.java.net/javadoc/overview-summary.html中描述的映射规则应该适用于它。

0

由于结构是不透明的,因此API不需要任何有关其内容的知识,因此您不必担心它们。

只要您看到对“zbar_image_scanner_t *”的引用,只需使用指针即可。