cpp_test.scala
import com.sun.jna.Library; import com.sun.jna.Native; import com.sun.jna.NativeLibrary; object cpp_test{ def main(args: Array[String]): Unit={ var a=Array(1.0,2.0,3.0); println("Input"); a.foreach{println} val lib=NativeLibrary.getInstance("cpp_test.dll"); val func=lib.getFunction("test2"); func.invokeVoid(Array(a,a.length.asInstanceOf[java.lang.Integer])); println("Output"); a.foreach{println} } }
cpp_test.c
#include<stdio.h> void test2(double r1[],int n){ int i; for(i=0;i<n;i++){ r1[i]=r1[i]+1; } }
cpp_test.h
#ifndef cpp_test #define cpp_test #include<stdio.h> void test2(double *r ,int n); #endif
出力例:
Input
1.0
2.0
3.0
Output
2.0
3.0
4.0
参考 ライブラリファイル作成用のスクリプト
filename=$1; filename=`basename $filename .c` #filename2=`basename $2 .c` echo $filename; echo $filename2; x86_64-w64-mingw32-gcc -c $filename.c echo "test" x86_64-w64-mingw32-gcc -shared -o $filename.dll $filename.o echo "test2"; #x86_64-w64-mingw32-gcc $filename2.c -o $filename2.out -L. -l$filename