JNA实现Java调用Fortran
来源:互联网 发布:红蜘蛛调色软件 编辑:程序博客网 时间:2024/05/01 13:35
在成功实现Java调用C++之后,接下来想到能否通过JNA实现Java调用Fortran,今天试验了一下,还是比较容易的。
网上有一个Java调用F95的例子,但是我考虑不仅要实现F95的调用,还要实现F77的调用,所以费了一些周折。
问题的关键在于F77为过程名自动添加了一个尾部的下划线,所以sub1这个过程,到Java一端,就变成了sub1_,知道了这一点,后面就简单了。
1、创建一个动态链接库项目FortranDLL,新建一个简单的fortran源程序for1.f:
subroutine sub1(i)
INTEGER i;
PRINT*, "SUB1 CALLED"
PRINT*, i
END subroutine
编译代码生成libFortranDLL.dll。
2、新建一个Java项目,包含JNA库
创建一个动态库接口代码FLib.java:
import com.sun.jna.Library;
import com.sun.jna.ptr.ByReference;
public interface FLib extends Library {
void sub1_(ByReference i);
}
import com.sun.jna.ptr.ByReference;
public interface FLib extends Library {
void sub1_(ByReference i);
}
创建一个主程序Main.java
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
public class Main {
public static void main(String[] args) {
// Loading dynamically the library
FLib lib2 = (FLib) Native.loadLibrary("libFortranDLL", FLib.class);
IntByReference a = new IntByReference(1234);
lib2.sub1_(a);
}
}
import com.sun.jna.ptr.IntByReference;
public class Main {
public static void main(String[] args) {
// Loading dynamically the library
FLib lib2 = (FLib) Native.loadLibrary("libFortranDLL", FLib.class);
IntByReference a = new IntByReference(1234);
lib2.sub1_(a);
}
}
注意,关键在于接口当中的sub_这个命名规则,否则无法找到找到指定过程,另外默认情况下,fortran使用引用参数,所以不能简单实用int作为参数,必须实用引用参数。
运行程序,得到如下结果:
run:
SUB1 CALLED
1234
成功生成(总时间:1 秒)
3、G95的调用更简单一些,可以直接使用bind指定输出过程(函数)名,可以完全不必考虑编译器的命名规则,比f77的方式可移植性更好一些。
- JNA实现Java调用Fortran
- Java调用dll的实现,JNA框架
- Java中JNA调用
- JNA--Java调用DLL
- JAVA JNA 调用 .so
- java jna 调用DLL
- JNA实现Java调用C++动态链接库
- JNA(JAVA调用lib/so)
- Simplest JNA 【java调用C++】
- java本地调用 - JNA技术
- java通过 JNA调用 so
- JAVA调用C++方式------JNA
- JAVA调用JNA修改桌面壁纸
- JNA调用C实现的DLL
- java(JNA)调用dll函数的问题
- JNA java调用c/c++代码
- java 调用dll之jna(3)
- java使用jna 方法调用Win32 dll
- 2010年5月18日(变量和表达式)
- 开张除草
- Swing的设计是MVC的典范
- struts上传图片argument type mismatch错误
- Oracle Logminer 说明
- JNA实现Java调用Fortran
- struts2 hidden 页面取值
- WINDBG使用教程
- Dll小结-->基础部分
- 16bit灰度图像映射到8bit显示
- 不要再消极
- Scratchbox on Ubuntu
- Web 测试
- 可怜的袁腾飞