Ich habe den folgenden C-Code:Wie eine Struktur mit einer Struktur in jnr ffi verwenden
#include <stdio.h>
struct Second {
int a_number;
};
struct Top {
struct Second second;
};
void lets_go(struct Top *top) {
printf("The number is %d\n", top->second.a_number);
}
Und ich möchte, dies zu tun, außer von Java:
int main(void) {
struct Top top = {{8}};
lets_go(&top);
}
Ich möchte auch verwenden das super cool jnr-ffi Sachen suchen, so sah ich die Tests an und gebastelt und am Ende mit diesem:
package structs.playing;
import structs.playing.Program.Test.Top;
import structs.playing.Program.Test.Second;
import jnr.ffi.LibraryLoader;
import jnr.ffi.Runtime;
import jnr.ffi.Struct;
public final class Program {
public static interface Test {
void lets_go(Top top);
public static final class Second extends Struct {
public final Signed32 a_number = new Signed32();
public Second(final Runtime runtime) {
super(runtime);
}
}
public static final class Top extends Struct {
public Second second;
public Top(final Runtime runtime) {
super(runtime);
}
}
}
public static void main(final String[] args) {
Test test = LibraryLoader.create(Test.class).load("test");
Runtime runtime = Runtime.getRuntime(test);
Top top = new Top(runtime);
Second second = new Second(runtime);
top.second = second;
second.a_number.set(7);
test.lets_go(top);
}
}
das Problem ist, dass th e-Wert von a_number
überhaupt so nicht gesetzt ich einen Junk-Wert in der Ausgabe zu erhalten, zum Beispiel:
The number is 46645760
Also wie bekomme ich die gleiche wie in meinem C-Code?
Warum verwenden Sie nicht 'int' im Java-Code als auch? – Shark
@Shark, weil ein int würde nicht richtig zum ursprünglichen Code marshalled – kmp