2010-03-07 100 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 *」的引用,只需使用指針即可。