Geir Magnusson Jr. wrote:

What are you working on?

It's a framework to ease JNI programming, or more precisely to make it possible to call native, e.g. OS functions without writing wrapper code in C to do type conversions etc.

For example, invoking the Windows MessageBox function in user32.dll can be done like this:

EasyJni jni = EasyJni.getInstance();
NativeLibrary user32 = jni.loadNativeLibrary("user32");

long ctext = jni.createCString("Message box text", "UTF-16LE");
long ctitle = jni.createCString("Message box title", "UTF-16LE");

int res = (int)user32.invokeLong(
 "MessageBoxW", 0, ctext, ctitle, MessageBoxConstants.MB_OKCANCEL);

jni..free(ctext);
jni.free(ctitle);

C structs can be mapped to Java classes using annotations, as here with the WAVEFORMAT struct used by the Windows audio API:

@NativeStruct(endian=Endian.little, size=16)
public class WaveFormat implements Modifiable {

   @NativeField(type=FieldType.int16, offset=0)
   private int formatTag;

   @NativeField(type=FieldType.int16, offset=2)
   private int channels;
@NativeField(type=FieldType.int32, offset=4)
   private int samplesPerSecond;

   @NativeField(type=FieldType.int32, offset=8)
   private int avgBytesPerSecond;
@NativeField(type=FieldType.int32, offset=12)
   private int blockAlign;

   // getter and setter methods ...
}

I needed this for some audio functionality, which is not available through JavaSound. The JNI library could probably be used in several fields, and seeing that Classpath does not implement any parts of JavaSound, my Windows media API wrappers are probably a good starting point for a new JavaSound implementation (at least targetted for Windows).

Tor

Reply via email to