我遇到了返回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返回?
答案 0 :(得分:0)
你可以在这里粘贴错误吗? 实际上,你不能返回一个类 - 它只是没有意义,你总是返回一个对象,这是一个类的实例。
答案 1 :(得分:0)
您无法将C ++对象强制转换为jobject
。
一种方法是定义一个具有KeyPair
字段的Java private long ptr
类,在该字段中填充指向C ++ KeyPair
对象的指针。如果您创建一个用ptr
字段填充其参数的单参数构造函数,它会有所帮助。
创造这样的东西:(另见How to create an object with JNI?)
KeyPair
类(env->FindClass
)相关联的jclass。env->GetMethodId
)。env->NewObject
)。jobject
。如果您稍后需要从ptr
KeyPair
中提取jobject
,则需要查找ptr
的字段ID并使用env->GetLongField
提取它。