首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构中缺少JNAerator未命名联合

结构中缺少JNAerator未命名联合
EN

Stack Overflow用户
提问于 2010-03-24 04:01:49
回答 3查看 620关注 0票数 1

我正在尝试让JNAerator从一个C共享库生成一些JNA支持的Java代码,一切都很好,除了它无法生成一个嵌套在结构中的未命名的联合。

示例:

代码语言:javascript
复制
typedef struct MY_STRUCTURE {
  union {
    My_Type1 var1;
    My_Type2 var2;
  };

}MY_STRUCTURE;

如果我更改头文件,使联合有一个名称,它将工作。但是由于显而易见的原因,我不能仅仅改变头文件而不破坏我正在尝试使用的共享库。

除了将头文件和共享库更改为命名联合之外,还有其他解决方案吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-03-25 00:30:42

添加名称不会更改内存布局,因此您可以更改名称,对Java代码执行JNAerate (这将适当地映射内存/结构),然后撤消更改。添加名称不会影响JNA将结构映射到实际的库。

编辑:您的结果有点奇怪,因为JNAerator文档清楚地指出了anonymous types problem,并且似乎表明它应该产生正确的结果。

票数 0
EN

Stack Overflow用户

发布于 2010-04-15 01:51:59

这是JNAerator中的一个错误。我已经在JNAerator项目的跟踪器中输入了一个问题,所以如果你想在错误修复时得到通知,你可以启动它:

http://code.google.com/p/jnaerator/issues/detail?id=60

干杯

奥利维尔(JNAerator的作者)

票数 4
EN

Stack Overflow用户

发布于 2010-03-25 20:29:10

经过更多的研究,我确定我的问题是匿名联盟的问题,而不是匿名联盟的问题。JNAerator声称支持匿名联盟,但我还没有找到任何关于匿名联盟的信息。根据我的经验,我会说它不支持未命名的联合。

附注:在标准C中不支持未命名的联合。一些编译器支持它,但不是大多数编译器都支持。它是C++中的标准。

匿名联盟:

代码语言:javascript
复制
typedef struct MY_STRUCTURE {
  int i;
  char c; 
  union { 
    My_Type1 var1; 
    My_Type2 var2; 
  }UnionName; 

}MY_STRUCTURE;

匿名和未命名的联合:

代码语言:javascript
复制
typedef struct MY_STRUCTURE { 
  int i;
  char c;
  union { 
    My_Type1 var1; 
    My_Type2 var2; 
  }; 

}MY_STRUCTURE;

结论: Marks解决方案

将报头中的未命名联合更改为命名联合,然后JNAerate Java代码,然后将报头更改回原来的状态。就像Mark说的,它不会改变内存布局,所以你可以更改名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2503183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档