JNAerator未命名的Union在结构中缺失

我正在尝试让JNAerator从C共享库生成一些JNA支持的Java代码,一切都很好,除了它无法生成嵌套在结构中的未命名联合。 例:
typedef struct MY_STRUCTURE {
  union {
    My_Type1 var1;
    My_Type2 var2;
  };

}MY_STRUCTURE;
如果我更改标题以使联合具有名称它将起作用。但由于显而易见的原因,我不能在不破坏我正在尝试使用的共享库的情况下更改标头。 除了将头文件和共享库更改为命名联合之外的任何其他解决方案?     
已邀请:
添加名称不会更改内存布局,因此您可以更改名称,JNAerate Java代码(将适当地映射内存/结构),然后撤消更改。 JNA将结构映射到实际库不会受到添加名称的影响。 编辑:您的结果有点奇怪,因为JNAerator文档清楚地解决了匿名类型问题,并且似乎表明它应该产生正确的结果。     
这是JNAerator中的一个错误。 我在JNAerator项目的跟踪器中输入了一个问题,因此如果您想在错误修复时得到通知,您可以为其加注: http://code.google.com/p/jnaerator/issues/detail?id=60 干杯 Olivier(JNAerator的作者)     
经过更多的研究,我确定我的问题是未命名的工会而不是匿名工会的问题。 JNAerator声称支持匿名工会,但我没有在未命名的工会上找到任何东西。根据我的经验,我会说它不支持未命名的工会。 附注:标准C不支持未命名的联合。有些编译器支持它但不是大多数。它是C ++的标准。 匿名联盟:
typedef struct MY_STRUCTURE {
  int i;
  char c; 
  union { 
    My_Type1 var1; 
    My_Type2 var2; 
  }UnionName; 

}MY_STRUCTURE;
匿名和未命名的联盟:
typedef struct MY_STRUCTURE { 
  int i;
  char c;
  union { 
    My_Type1 var1; 
    My_Type2 var2; 
  }; 

}MY_STRUCTURE;
结论:标记解决方案 将标头中未命名的union更改为命名的union,然后JNAerate Java代码,然后将标头更改回原来的样式。就像马克说它不会改变内存布局,所以你可以更改名称。     

要回复问题请先登录注册