gpt4 book ai didi

java - 从 C++ 获取 Java 中的 Struct 对象

转载 作者:太空狗 更新时间:2023-10-29 14:29:50 24 4
gpt4 key购买 nike

我有 C++ 结构:

typedef struct FunctionArgs
{
char* url;
char* info;
int id;
bool isWorking;
}

C++ 函数,它作为参数获取 FunctionArgs 结构,现在我想从此函数调用 Java 方法并作为该方法的参数给 FunctionArgs 结构。

void func( const FunctionArgs& args )
{
// Do some code ...

env->CallObjectMethod( clazzObject, clazzMethod, args );

}

正如您在 env->CallObjectMethod( clazzObject, clazzMethod, *args ); 中看到的那样,函数作为第三个参数,我给 args 也就是 FunctionArgs 结构对象。

JAVA 我有类和函数:

class JFunctionArgs 
{
String url;
String info;
int id;
boolean isWorking;
}

public class SomeClass
{
public void func( JFunctionArgs args )
{

}
}

我想知道

  1. 我可以做一些我做的事 env->CallObjectMethod( clazzObject, clazzMethod, args );,我的意思是我可以将结构对象作为参数传递给 CallObjectMethod 吗?
  2. 如何在 Java 代码 func 中获取结构对象?

最佳答案

你不能。假设您实际上需要在 Java 和 C 中使用此数据,您将需要在 Java Object 和 C struct 之间编码。

在您的 JNI 代码中,您需要创建一个新的 Java 对象并填充其数据。例如:

jclass clazz = env->FindClass("JFunctionArgs");
jmethodID ctor = env->GetMethodID(clazz, "<init>", "()V");
jobject obj = env->NewObject(clazz, ctor);

jfieldID urlField = env->GetFieldID(clazz, "url", "Ljava/lang/String;");
env->SetObjectField(obj, urlField, env->NewString(functionArgs.url));

...等等

(但是,如果您只需要在 C 中修改 struct 的数据,您可以简单地返回指向它的指针并将其视为不透明的 long在 Java 中。)

关于java - 从 C++ 获取 Java 中的 Struct 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8094239/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com