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
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
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
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 #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); }
Reponse :
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); } }
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.
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)
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 .
Partager