從C我創建一個用Java加載的DLL。我調用了一些來自java的C函數,並且還從C調用了Java函數(如果數據類型不復雜) - 這個工作正常。如何通過使用JNI將C結構轉移到java?
我很難將C結構轉換爲Java。
這裏是一個小例子,描述我想要做什麼。 它不完整,也許不正確,因爲我的問題是我不知道該怎麼做。
我的目標是將類型「StructType」中的結構從C傳遞給Java,以便使用Java程序中的值。
在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);
}
在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);
}
在此先感謝您的幫助。
Steffen
感謝弗拉基米爾。該示例中的結構稍微複雜一些,我需要使用它。但是如何從C函數的結構中訪問java對象以使用setter和getters(以下示例)? – 2011-01-11 10:43:09
更新了答案。 – 2011-01-11 11:22:03