Od C Tworzę bibliotekę DLL, która jest ładowana w Javie. Wywołuję niektóre funkcje C z java, a także wywołuję funkcje Java z C (z typami danych nieskompleksowych) - to działa poprawnie.Jak przenieść strukturę C do java za pomocą JNI?
Walczę z przeniesieniem struktury C do Javy.
Oto mały przykład opisujący to, co chcę zrobić. To nie jest kompletne i może nie jest poprawne, ponieważ moim problemem jest to, że nie jestem pewien, jak to zrobić.
Moim celem jest przekazanie struktury z typu "StructType" z C do Javy w celu użycia wartości w programie Java.
W C
typedef struct {
unsigned char value1;
unsigned char value2;
} StructType;
void passStructToJava(StructType* myStruct)
{
class cls;
jmethodID mid;
/* GlobalEnv, GlobalObj are globlal values which are already set */
cls = (*GlobalEnv)->GetObjectClass(GlobalEnv, GlobalObj);
mid = (*GlobalEnv)->GetMethodID(GlobalEnv, cls, "receiveStructFromC", "(LPackage/StructType;)V");
(*GlobalEnv)->CallVoidMethod(GlobalEnv, GlobalObj, mid, myStruct);
}
W Javie
public class StructType {
public int value1; /* int because there is no uint8 type */
public int value2;
}
public StructType mMyStruct;
public StructType getMyStruct() {
return mMyStruct;
}
public void setMyStruct(StructType myStruct) {
mMyStruct = myStruct;
}
public void receiveStructFromC(StructType myStruct)
{
setMyStruct(myStruct);
}
Dzięki z góry za pomoc.
Steffen
Dzięki Vladimir. Struktura jest nieco bardziej skomplikowana niż w przykładzie i muszę z niej korzystać. Ale jak mogę uzyskać dostęp do obiektu java ze struktury w funkcji C, aby użyć ustawiających i pobierających (po przykładzie)? –
zaktualizował odpowiedź. –