-
Notifications
You must be signed in to change notification settings - Fork 109
Simple Meaningful Example
Aman Gupta edited this page Jun 1, 2017
·
7 revisions
struct Pair {
/// Comment on both first and second int first, second;
};
#define PAIRS_COUNT 10
#define EXPRESSION (1 << 10) | (1 << 5)
enum Values {
First, // first comments
Second, // comments on second
Last // not a real value
};
struct BiggerStruct {
Values enumValue;
bool (*hook)(int val);
long longValue;
int intArray[sizeof(Pair) * PAIRS_COUNT];
};
// Wonderful comments on Test function
void Test(BiggerStruct& s);
// Be careful with that one : intArray and source are const, dest is not void
CopyBytes(char* dest, const char* source, size_t n, const int* intArray);
java -jar jnaerator.jar -library Test Test.h -o . -v -noJar -noComp
(see Command Line Options And Environment Variables for more options)
File test/TestLibrary.java
:
package test;
/// JNA Wrapper for library test
public interface TestLibrary extends com.sun.jna.Library {
public TestLibrary INSTANCE =(TestLibrary)com.sun.jna.Native.loadLibrary("test", TestLibrary.class);
/**
* <i>native declaration : /Users/ochafik/Prog/Java/null:9</i><br>
* enum values
*/
public static interface Values {
/// first comments
public static final int First = 0;
/// comments on second
public static final int Second = 1;
/// not a real value
public static final int Last = 2;
}
public static final int PAIRS_COUNT = 10;
public static final int EXPRESSION = (1 << 10) | (1 << 5);
/// <i>native declaration : /Users/ochafik/Prog/Java/null:1</i>
public static class Pair extends com.sun.jna.Structure {
/// Allocate a new Pair struct on the heap
public Pair() {}
/// Cast data at given memory location (pointer + offset) as an existing Pair struct
public Pair(com.sun.jna.Pointer pointer, int offset) {
super();
useMemory(pointer, offset);
read();
}
/// Create an instance that shares its memory with another Pair instance
public Pair(Pair struct) { this(struct.getPointer(), 0);
}
public static class ByReference extends Pair implements com.sun.jna.Structure.ByReference {
/// Allocate a new Pair.ByRef struct on the heap
public ByReference() {}
/// Create an instance that shares its memory with another Pair instance
public ByReference(Pair struct) { super(struct.getPointer(), 0);
}
}
public static class ByValue extends Pair implements com.sun.jna.Structure.ByValue {
/// Allocate a new Pair.ByVal struct on the heap
public ByValue() {}
/// Create an instance that shares its memory with another Pair instance
public ByValue(Pair struct) { super(struct.getPointer(), 0);
}
}
/// Comment on both first and second
public int first;
/// Comment on both first and second
public int second;
}
/// <i>native declaration : /Users/ochafik/Prog/Java/null:15</i>
public static class BiggerStruct extends com.sun.jna.Structure {
/// Allocate a new BiggerStruct struct on the heap
public BiggerStruct() {}
/// Cast data at given memory location (pointer + offset) as an existing BiggerStruct struct
public BiggerStruct(com.sun.jna.Pointer pointer, int offset) {
super();
useMemory(pointer, offset);
read();
}
/// Create an instance that shares its memory with another BiggerStruct instance
public BiggerStruct(BiggerStruct struct) { this(struct.getPointer(), 0); }
public static class ByReference extends BiggerStruct implements com.sun.jna.Structure.ByReference {
/// Allocate a new BiggerStruct.ByRef struct on the heap
public ByReference() {}
/// Create an instance that shares its memory with another BiggerStruct instance
public ByReference(BiggerStruct struct) { super(struct.getPointer(), 0); }
}
public static class ByValue extends BiggerStruct implements com.sun.jna.Structure.ByValue {
/// Allocate a new BiggerStruct.ByVal struct on the heap
public ByValue() {}
/// Create an instance that shares its memory with another BiggerStruct instance
public ByValue(BiggerStruct struct) { super(struct.getPointer(), 0); }
}
/// @see Values
public int enumValue;
public hook_callback hook;
public com.sun.jna.NativeLong longValue;
public int[] intArray = new int[(new Pair().size() * 10)];
/// <i>native declaration : /Users/ochafik/Prog/Java/null</i>
public interface hook_callback extends com.sun.jna.Callback {
/// Original signature : <code>bool hook_callback(int)</code>
boolean invoke(int val1);
}
}
/**
* Wonderful comments on Test function<br>
* Original signature : <code>void Test(BiggerStruct&)</code><br>
* <i>native declaration : /Users/ochafik/Prog/Java/null</i>
*/
void Test(BiggerStruct s1);
/**
* Be careful with that one : intArray and source are const, dest is not<br>
* Original signature : <code>void CopyBytes(char*, const char*, size_t, const int*)</code><br>
* <i>native declaration : /Users/ochafik/Prog/Java/null</i><br>
* @deprecated use the safer methods {@link #CopyBytes(java.nio.ByteBuffer, java.lang.String, com.sun.jna.NativeLong, int[])} and {@link #CopyBytes(java.nio.ByteBuffer, java.lang.String, com.sun.jna.NativeLong, java.nio.IntBuffer)} instead
*/
@Deprecated
void CopyBytes(com.sun.jna.ptr.ByteByReference dest1, com.sun.jna.ptr.ByteByReference source2, com.sun.jna.NativeLong n3, com.sun.jna.ptr.IntByReference intArray4);
/**
* Be careful with that one : intArray and source are const, dest is not<br>
* Original signature : <code>void CopyBytes(char*, const char*, size_t, const int*)</code><br>
* <i>native declaration : /Users/ochafik/Prog/Java/null</i
*/
void CopyBytes(java.nio.ByteBuffer dest1, java.lang.String source2, com.sun.jna.NativeLong n3, int intArray4[]);
/**
* Be careful with that one : intArray and source are const, dest is not<br>
* Original signature : <code>void CopyBytes(char*, const char*, size_t, const int*)</code><br>
* <i>native declaration : /Users/ochafik/Prog/Java/null</i>
*/
void CopyBytes(java.nio.ByteBuffer dest1, java.lang.String source2, com.sun.jna.NativeLong n3, java.nio.IntBuffer intArray4);
}
Please read the page Documentation.
Simply download jna.jar and jnaerator.jar and you'll be generating your JNA interfaces in a minute !
Please read JNAerator FAQ and Troubleshooting JNAeration, or post your question to the JNA users mailing list.