能否实现JNI在DLL中使用C++Class写文件到磁盘?

Can JNI Be Implemented To Use A C++ Class In A DLL To Write A File To Disk?

我编写了一个 C++ class(例如 JsonWriter),它使用 RapidJson C++ 库 API 将格式化的 JSON 文件写入磁盘。我想在 Java 网络解决方案中使用这个 class 来使用 JNI 做同样的事情。

我试图通过将 JsonWriter 编译成一个 DLL 文件来达到这个目的,包括必要的 JNI 包含和 .cpp 以及可由 Java class 在 运行 时与 JsonWriter 的方法交互。

不幸的是,当我 运行 我的 Java Web 解决方案与已部署的 DLL 并调用 JsonWriter 的方法时,没有 JSON 文件被写入磁盘。我知道我的 Java 应用程序正在加载并适当地使用 DLL 中的 classes,因为 DLL 中的 C++ classes 正在输出调试语句并将值返回到 Java class 使用它们的人。但是,调用 JsonWriter 将 Json 文件写入磁盘并没有写入它,我也没有收到任何错误。

难道不能使用JNI调用DLL中的C++ class将文件写入磁盘吗?

我无法想象会是这样。调用 DLL 后,实际上是在调用不受 JVM 控制的本机代码。我的猜测是用户无权访问 DLL 试图写入的目录。 IOW,我更快地假设文件系统上的权限问题。

就没有收到错误而言,您是在调用 windows GetLastError 函数吗?如果出于某种原因 JNI 实际上阻止了它,我不得不相信 C++ 仍然会出错,因为它是本机代码并且在 JVM 的域之外。