C에서 Java로로드되는 DLL을 생성 중입니다. Java에서 C 함수를 호출하고 C에서 Java 함수를 호출합니다 (whith uncomplex 데이터 형식). 정상적으로 작동합니다.JNI를 사용하여 C 구조체를 Java로 전송하는 방법은 무엇입니까?
저는 C 구조체를 Java로 전송하는 데 어려움을 겪고 있습니다.
여기 내가 원하는 것을 설명하는 작은 예제가 있습니다. 내 문제는 내가 어떻게해야할지 모르므로 완전하지 않고 정확하지 않을 수 있습니다.
제 목표는 Java 프로그램의 값을 사용하기 위해 C에서 Java로 유형 "StructType"의 구조를 전달하는 것입니다. 당신의 도움에 미리 자바
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 함수의 구조체에서 setter 및 getters (예를 들어)를 사용하여 Java 객체에 액세스하려면 어떻게해야합니까? –
이 답변을 업데이트했습니다. –