以本机代码存储数据 我想写一个向量类或其他C++上的东西。我想使用Java中的方法。如何做到这一点?我想为此使用JNI。但是javah生成了mec原型。我想把数据存储在C++使用区域,而java中只使用没有字段的接口。所以,问题是如何将矢量数据存储在C代码中

以本机代码存储数据 我想写一个向量类或其他C++上的东西。我想使用Java中的方法。如何做到这一点?我想为此使用JNI。但是javah生成了mec原型。我想把数据存储在C++使用区域,而java中只使用没有字段的接口。所以,问题是如何将矢量数据存储在C代码中,java,java-native-interface,Java,Java Native Interface,注: 简单地说,我需要用JNI包上C++接口,在java中有这个接口。 < p>你需要在C++代码周围有一个C可调用包装器。该方法类似于如何允许C++库从纯C.中使用。这里是一个简单的例子,没有错误检查——不用于实际的生产代码: 但是在哪里存储MyVectorCreate的结果呢?在哪里为MyVectorAdd和MyVectorDestroy获取void*vecto?在JNI中,您需要处理void*vecto作为一个长的函数,根据需要从C到Java和从Java到C来回转换。那么,MyVector

注:


简单地说,我需要用JNI包上C++接口,在java中有这个接口。

< p>你需要在C++代码周围有一个C可调用包装器。该方法类似于如何允许C++库从纯C.中使用。这里是一个简单的例子,没有错误检查——不用于实际的生产代码:


但是在哪里存储MyVectorCreate的结果呢?在哪里为MyVectorAdd和MyVectorDestroy获取void*vecto?在JNI中,您需要处理void*vecto作为一个长的函数,根据需要从C到Java和从Java到C来回转换。那么,MyVectorCreate在Java中应该是什么样子的呢?当调用MyVectorDestroy时,我不是JNI专家,但您可能会从C代码返回64位long而不是void*,并将其捕获为Java long。当您需要对C代码进行回调时,您需要传递这么长的时间。在C代码中,您可以将long变回MyVector指针,并像使用普通对象一样使用它。
void * MyVectorCreate()
{
    return new MyVector<int>();
}

void MyVectorAdd(void * vector, int item)
{
    static_cast<MyVector<int> *>(vector)->Add(item);
}

void MyVectorDestroy(void * vector)
{
    delete static_cast<MyVector<int> *>(vector);
}