diff -ur jna-3.0.4-svn630/src/com/sun/jna/Structure.java jna-3.0.4-svn630.orig/src/com/sun/jna/Structure.java --- jna-3.0.4-svn630/src/com/sun/jna/Structure.java 2008-07-31 13:44:21.000000000 -0400 +++ jna-3.0.4-svn630.orig/src/com/sun/jna/Structure.java 2008-09-05 21:47:51.000000000 -0400 @@ -126,8 +126,16 @@ } protected Structure(int size, int alignment) { + this(size, alignment, null); + } + + protected Structure(TypeMapper mapper) { + this(CALCULATE_SIZE, ALIGN_DEFAULT, mapper); + } + + protected Structure(int size, int alignment, TypeMapper mapper) { setAlignType(alignment); - setTypeMapper(null); + setTypeMapper(mapper); allocateMemory(size); } @@ -974,7 +982,8 @@ } catch(IllegalArgumentException e) { throw new IllegalArgumentException("The type \"" + type.getName() - + "\" is not supported as a structure field"); + + "\" is not supported as a structure field: " + + e.getMessage()); } } diff -ur jna-3.0.4-svn630/src/com/sun/jna/Union.java jna-3.0.4-svn630.orig/src/com/sun/jna/Union.java --- jna-3.0.4-svn630/src/com/sun/jna/Union.java 2008-07-31 13:44:21.000000000 -0400 +++ jna-3.0.4-svn630.orig/src/com/sun/jna/Union.java 2008-09-05 21:47:18.000000000 -0400 @@ -39,6 +39,11 @@ protected Union(int size, int alignType) { super(size, alignType); } + + protected Union(TypeMapper mapper) { + super(mapper); + } + /** Indicates which field will be used to write to native memory. * @throws IllegalArgumentException if the type does not correspond to * any declared union field.