Cから私はJavaでロードされるDLLを作成しています。 私はjavaからいくつかのC関数を呼び出し、Java関数をCから呼び出します(whith uncomplexデータ型)。これはうまくいきます。JNIを使用してC構造体をJavaに転送する方法は?
私はC構造体をJavaに転送するのに苦労します。
ここに、私がしたいことを説明する小さな例があります。 私の問題は私がそれを行う方法がわからないため、完全ではなく、正しくない可能性があります。
私の目標は、Javaプログラムの値を使用するために、CからJavaへの "StructType"タイプの構造体を渡すことです。 Javaの
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);
}
で
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);
}
あなたの助けを事前に感謝します。
Steffen
感謝ウラジミールを。例のように構造が少し複雑で、私はそれを使う必要があります。しかし、C言語の関数の構造体からJavaオブジェクトにアクセスしてsetterとgetterを使用するにはどうしたらよいですか? –
が答えを更新しました。 –