■ 数値の参照渡しを行うには...
* ByteByReference/DoubleByReference/IntByReference/FloatByReference/LongByReference/ShortByReference
を使用し、値を「getValue()」で取得する
サンプル
C側
// SampleDemo.c (「gcc -fPIC -shared -o libSampleDemo.so SampleDemo.c」でビルド)
int sampleForCallByReference(int* referenceValue)
{
*referenceValue = 123456;
return 0;
}
Java側
// ISampleDemo.java
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.ptr.IntByReference;
public interface ISampleDemo extends Library {
// インスタンス生成
ISampleDemo INSTANCE = (ISampleDemo) Native.loadLibrary("~/workspace/Demo/etc/libSampleDemo.so", ISampleDemo.class);
int sampleForCallByReference(IntByReference referenceValue);
}
// Main.java
import com.sun.jna.ptr.IntByReference;
public class Main {
public static void main(String[] args) {
ISampleDemo sampleDemo = ISampleDemo.INSTANCE;
IntByReference referenceValue = new IntByReference();
int returnValue = sampleDemo.sampleForCallByReference(referenceValue);
System.out.println("returnValue = " + returnValue + " referenceValue = " + referenceValue.getValue());
}
}
出力結果
returnValue = 0 referenceValue = 123456