[JNA] Union - Problème entre L'union C et en Java
Bonjour à tous,
Je viens encore une fois vers vous car j'ai des soucis avec les unions entre le c et Java.
Donc voici une peu de code :
Le Header
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
#ifndef TESTSTRUCT_H_INCLUDED
#define TESTSTRUCT_H_INCLUDED
#include <stdlib.h>
#include <stdio.h>
typedef int INT32;
typedef unsigned int UINT32;
typedef union {
INT32 i;
UINT32 u;
float f;
char *s;
} Value;
void plop(Value *value);
void plopFloat(Value *value);
void plopString(Value *value);
#endif // TESTSTRUCT_H_INCLUDED |
Le point c.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
#include "TestStruct.h"
void plop(Value *value){
printf("\n\n plop value : %d \n", value->i);
}
void plopFloat(Value *value){
printf("\n\n plop float : %f \n", value->f);
}
void plopString(Value *value){
printf("\n\n plop string : %s \n", value->s);
} |
Et la classe java :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
|
public class StructureJna {
static {
System.setProperty("jna.library.path","Libraries");
}
private MyLibrary lib ;
public StructureJna(){
lib = (MyLibrary) Native.loadLibrary("Structure",Platform.isWindows() ? MyWin.class : MyLibrary.class);
}
public MyLibrary getLib() {
return lib;
}
public interface MyLibrary extends com.sun.jna.Library {
void plop(Value value);
void plopFloat(Value value);
void plopString(Value value);
public static class Value extends com.sun.jna.Union{
public int i;
public int u;
public float f;
public String s = null;
public static class ByValue extends Value implements com.sun.jna.Union.ByValue{ };
}
}
public interface MyWin extends MyLibrary{}
public static void main(String[] args){
StructureJna s = new StructureJna();
Value value = new Value();
value.i = 5;
s.getLib().plop(value);
Value valuef = new Value();
valuef.f = (float) 0.4;
s.getLib().plopFloat(valuef);
ByValue values = new StructureJna.MyLibrary.Value.ByValue();
values.s = "salut";
s.getLib().plopString(values);
}
} |
Reponse :
Code:
1 2 3 4 5 6
|
plop value : 0
plop float : 0.000000
plop string : (null) |
Voilà, j'ai essayé en com.sun.jna.union.byvalue, ou com.sun.jna.union.byreference ou sans cela et ben cela ne marche pas.
J'ai essayé en com.sun.jna.Structure ne marche pas non plus...
Le code C marche en compilant avec un main en C.
Donc voilà, est-ce que quelqu'un a déjà fait un Union en JNA ou si connait.
Merci à vous :).