J ++ to Java:如何从RNI迁移到JNI?

时间:2009-09-14 01:32:24

标签: java interop java-native-interface j++

我继承了遗留的J ++项目。我已成功将此项目升级到标准Sun Java。

但是,此项目包含一个本机C ++ DLL,Java代码通过特定于Microsoft的RNI framework与之对话。

毋庸置疑,调用System.loadLibrary(“myRniNativeDll”)现在会抛出一个UnsatisifiedLinkError,说无法找到其中一个依赖项。

我完全不知道如何将C ++ RNI dll迁移到JNI dll;我不知道从哪里开始。我有C ++源代码,但我不知道如何构建JNI DLL。 Java专家可以指出哪些提示/教程/在线资料?

5 个答案:

答案 0 :(得分:3)

如果许可是可接受的(LGPL),Java Native Access提供了比JNI更友好的FFI;移植可以减少剥离RNI层并暴露一个简单的'C'可调用API。

答案 1 :(得分:3)

看一下JNA - 可以直接以这种方式访问​​RNI DLL;或者至少它会比手动操作JNI更容易移植它。

答案 2 :(得分:2)

如果可能,我建议您考虑避免使用RNI - > JNI通过在纯Java中重写C ++代码来移植问题。

编写JNI代码需要大量的注意,如果你弄错了,JVM的稳定性就会受到威胁。我的建议是尽可能避免它。

答案 3 :(得分:1)

虽然我从未使用过微软的RNI,只有Sun的JNI,我希望你不能直接使用RNI风格的DLL,就像它是一个JNI风格的DLL一样。我也没有意识到会自动转换或将RNI桥接到JNI的任何事情。

你没有提到你是否拥有C ++ RNI DLL的源代码,尽管我会假设你提到继承该项目。如果您有任何C ++ / C经验,并且非常了解RNI DLL提供的功能,那么将其移动到JNI应该不会太困难。移植它所花费的时间可能会有助于保持它向前发展。

您在Wikipedia上提供给JNI条目的链接有很多关于JNI编码的有用链接。没有更多细节,很难提供任何其他建议。

答案 4 :(得分:1)

Java Native Interface: Programmer's Guide and Specification是我发现编写JNI代码的最佳资源。它不包括RNI - > JNI,但它是学习JNI如何工作的一个很好的起点。

*它实际上非常干燥,读起来不是特别有趣,但它是我能找到的最好的。