【Java】【C】【C++】 JNA [3] ~ あれこれ編 ~

■ 数値の参照渡しを行うには...

 * 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