Từ C Tôi đang tạo một tệp DLL được tải bằng Java. Tôi gọi một số hàm C từ java và cũng gọi các hàm Java từ C (các kiểu dữ liệu không phức tạp) - điều này hoạt động tốt.Làm thế nào để chuyển một cấu trúc C sang java bằng cách sử dụng JNI?
Tôi đấu tranh với việc chuyển giao cấu trúc C sang Java.
Dưới đây là một ví dụ nhỏ mô tả những gì tôi muốn làm. Nó không đầy đủ và có thể không chính xác bởi vì vấn đề của tôi là tôi không chắc chắn làm thế nào để làm điều đó.
Mục tiêu của tôi là chuyển cấu trúc từ loại "StructType" từ C sang Java để sử dụng các giá trị trong chương trình Java.
Trong 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);
}
Trong 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ảm ơn trước sự giúp đỡ của bạn.
Steffen
Cảm ơn Vladimir. Cấu trúc phức tạp hơn một chút như trong ví dụ và tôi cần sử dụng nó. Nhưng làm thế nào tôi có thể truy cập đối tượng java từ cấu trúc trong hàm C để sử dụng các bộ định tuyến và getters (theo ví dụ)? –
đã cập nhật câu trả lời. –