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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 .