相关疑难解决方法(0)

Android NDK,保存实时C++对象

我有一个以下问题.我想编写一个Android应用程序,它使用我的旧C++类.我必须在整个应用程序生命周期中保持C++对象的存活.

我在C#中编写了一个类似的应用程序,并通过将指向C++的指针传递给C#并使用IntPtr将其存储在那里来解决问题.然后,当我想在该对象上调用一个方法时,我只是将该指针再次传递给C++,转换为类指针并在其上调用一个方法.

如何在Java和Android NDK中实现类似的结果?Java是否支持存储指针?

c++ java android android-ndk

14
推荐指数
2
解决办法
4293
查看次数

JNI 通过多个 JNI 调用使 C++ 中的对象保持活动状态

我的 Java 本机音频库有问题,但首先,这是我当前的方法:

  1. 使用本机方法,我打开一个“全局”流,它通过回调函数接收数据。
  2. 回调函数会一直运行,直到没有数据为止。
  3. 如果没有数据,流只会停止,但不会关闭。
  4. 现在我想再次向流提供数据[尝试再次启动流(允许此操作)],但流已被删除。

所以现在我试图弄清楚如何防止从 C++ 或 Java 中删除流。

一种解决方案是在流中创建一个线程,以防止删除。

但我不喜欢这个解决方案......

因此,我搜索了如何使此类对象保持活动状态,并发现可以使用 JNI 进行所谓的“全局引用”。但我不明白它们是只适用于java对象还是两者都适用。

我还尝试了另一种 C++ 指针类型是否可以提供帮助。

我感谢任何帮助或想法,它不一定只是 JNI。C++ 标准库方法/函数/类等也很好:)!

系统信息:

  • 编译器:MinGW64 over MSYS2
  • JDK8u91
  • 当然是64位操作系统(不必命名xD)

全局流意味着所有 JNI 方法都可以访问该流。

编辑:

好吧,“为了让猫从后面出来”,我正在使用 RtAudio。 实时 C++ 音频库

例子:

//THIS IS C++ CODE
RtAudio audio(RtAudio::WASAPI);

int callback(//Buffer stuff etc.){
  //do something
 if(data.isEmpty())return 1;//invokes audio.closeStream() but this does NOT closes the stream!
 else return 0; //Go on with the stream rather wait for the next call
}    


JNIEXPORT void JNICALL openStream(jintArray …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface pointers reference

6
推荐指数
1
解决办法
971
查看次数