Получить объект Struct в Java из C ++ - PullRequest
3 голосов
/ 11 ноября 2011

У меня есть C ++ struct:

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

И C ++ функция, которая в качестве аргумента получает FunctionArgs struct, теперь я хочу вызвать из этогоМетод Java-функции и в качестве аргумента этого метода дают FunctionArgs struct.

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

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

}

Как вы можете видеть в env->CallObjectMethod( clazzObject, clazzMethod, *args ); функцию в качестве третьего аргумента, я даю args, который является FunctionArgs struct object.

В 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 );, Я имею в виду, могу ли я дать struct object CallObjectMethod в качестве аргумента?
  2. Как я могу получить struct object в Java-коде func?

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

Вы не можете.Предполагая, что вам действительно нужно использовать эти данные как в 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));

... и т. Д.

(Если, однако, вам нужно только изменить данные struct в C, вы можете просто вернуть указатель наэто и обрабатывать его как непрозрачный long в Java.)

0 голосов
/ 11 ноября 2011

Вы можете сделать это, но вы должны сопоставить значения самостоятельно.Вам следует взглянуть на этот вопрос: Как передать структуры C взад и вперед в код Java в JNI? .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...