Abd*_*liq 9 java enums native jna
我有以下枚举如何在jna中映射?
该枚举在结构中进一步引用.
typedef enum
{
eFtUsbDeviceNotShared,
eFtUsbDeviceSharedActive,
eFtUsbDeviceSharedNotActive,
eFtUsbDeviceSharedNotPlugged,
eFtUsbDeviceSharedProblem
} eFtUsbDeviceStatus;
Run Code Online (Sandbox Code Playgroud)
阿卜杜勒·卡利克
Mar*_*iot 11
如果您正在使用JNA,则可能需要在Java中显式指定枚举的值.默认情况下,Java的基本枚举类型并不真正为您提供该功能,您必须为EnumSet添加构造函数(请参阅此内容和此内容).
编码C枚举的一种简单方法是使用包含在与枚举同名的类中的public static final const int.您可以从Java枚举中获得大部分功能,但分配值的开销略小.
有一些很好的JNA例子,包括下面的代码片段(其被复制)都可以在这里.
假设你的C代码如下:
enum Values {
First,
Second,
Last
};
Run Code Online (Sandbox Code Playgroud)
然后Java看起来像:
public static interface Values {
public static final int First = 0;
public static final int Second = 1;
public static final int Last = 2;
}
Run Code Online (Sandbox Code Playgroud)
在我的博客上,我写了一个方便的方法来使用真正的 Java enum与JNA,而不是任意ints.它有点复杂,但它有几个优点:
基本上,你需要使用自定义TypeConverter为enum通过一个简单的,并提供给JNA TypeMapper.大多数额外的代码是为了避免需要TypeConverter为每个不同的enum类分开.(就我而言,我不得不做很多.)
你可以在我的jhllib项目中看到一些真实的代码.特别是,请查看HlTypeMapper,EnumConverter和JnaEnum的定义和用法.
| 归档时间: |
|
| 查看次数: |
6841 次 |
| 最近记录: |