代码之家  ›  专栏  ›  技术社区  ›  Judah Gabriel Himango

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

  •  3
  • Judah Gabriel Himango  · 技术社区  · 15 年前

    我继承了一个传统的J++项目。我已经成功地将这个项目升级到标准的Sun Java。

    但是,这个项目包括一个原生的C++ DLL,Java代码通过微软特定的语言进行对话。 RNI framework .

    不用说,调用system.loadlibrary(“myrninitivedll”)现在会抛出一个未经授权的链接错误,表示找不到某个依赖项。

    我完全不知道如何将C++ RNI DLL迁移到JNI DLL;我不知道从哪里开始。我有C++源代码,但我不知道如何构建JNI DLL。 你有什么样的技巧/教程/在线材料可以让Java专家指点我吗?

    5 回复  |  直到 15 年前
        1
  •  3
  •   Steve Gilham    15 年前

    如果许可是可接受的(lgpl), Java Native Access 提供了比JNI更友好的FFI;移植可能会减少剥离RNI层并只公开一个简单的“C”可调用API。

        2
  •  3
  •   Michael Borgwardt    15 年前

    看一看 JNA -可以通过这种方式直接访问RNI DLL;或者至少它将使移植RNI的工作比手动执行JNI容易得多。

        3
  •  2
  •   Judah Gabriel Himango    15 年前

    如果可能的话,我建议您考虑通过重写纯Java中的C++代码来避免RNI& GT;JNI移植问题。

    编写JNI代码需要大量的注意,如果您弄错了,就可能危及到JVM的稳定性。我的建议是,如果可能的话,尽量避免。

        4
  •  1
  •   monceaux    15 年前

    虽然我从未使用过微软的RNI,只有Sun的JNI,但我希望您不能像使用JNI样式的DLL一样直接使用RNI样式的DLL。我也不知道有什么东西会自动转换或桥接RNI到JNI。

    你没有提到如果你有C++的RNI DLL的来源,尽管我会假设你这么做,因为你提到继承项目。如果您有任何C++/C经验,并且对RNI DLL所提供的功能有很好的了解,那么将其移动到JNI应该不太困难。投入在移植上的时间很可能会使它继续向前发展。

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

        5
  •  1
  •   TwentyMiles    15 年前

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

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