如果我上课,我该如何归还作业?

时间:2017-09-22 13:28:59

标签: java c++ java-native-interface

我遇到了返回jobject的问题。

我上课了:

 class KeyPair  {

        std::vector<BYTE> _publicKey;
        std::vector<BYTE> _privateKey;

    public:
        void SetKeys(std::vector<BYTE> publicKey, std::vector<BYTE> privateKey)
        {
            _publicKey = publicKey;
            _privateKey = privateKey;
        };
    };

和功能:

JNIEXPORT jobject JNICALL function(JNIEnv *env, jobject)
{
    //some code
    KeyPair keyPair;
    keyPair.SetKeys(pub, priv);
    return keyPair;//error
}

如何将keyPair作为jobjecct返回?

2 个答案:

答案 0 :(得分:0)

你可以在这里粘贴错误吗? 实际上,你不能返回一个类 - 它只是没有意义,你总是返回一个对象,这是一个类的实例。

答案 1 :(得分:0)

您无法将C ++对象强制转换为jobject

一种方法是定义一个具有KeyPair字段的Java private long ptr类,在该字段中填充指向C ++ KeyPair对象的指针。如果您创建一个用ptr字段填充其参数的单参数构造函数,它会有所帮助。

创造这样的东西:(另见How to create an object with JNI?

  • 查找与您的java KeyPair类(env->FindClass)相关联的jclass。
  • 查找构造函数(env->GetMethodId)。
  • 实例化对象(env->NewObject)。
  • 最后,返回jobject

如果您稍后需要从ptr KeyPair中提取jobject,则需要查找ptr的字段ID并使用env->GetLongField提取它。