scalaとC言語で配列の値の1をたす,ポインタ渡しの例

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