0

我正在使用JNA for ZBar(library for bar code reader)创建 Java 接口。

在 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 中为这些结构编写接口?

4

2 回答 2

0

struct 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中描述的映射规则应该适用于它。

于 2010-03-27T14:49:07.663 回答
0

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

每当您看到对“zbar_image_scanner_t *”的引用时,只需使用指针。

于 2011-11-12T15:09:38.140 回答