package com.whty.demo;
import com.sun.jna.Library; import com.sun.jna.Memory; import com.sun.jna.Native; import com.sun.jna.Pointer;
import javax.swing.filechooser.FileSystemView; import java.io.File; import java.util.Arrays;
public class GoAddExample { public interface AddDLL extends Library {
AddDLL INSTANCE = Native.loadLibrary(new File(FileSystemView.getFileSystemView().getHomeDirectory(), "add.dll").getAbsolutePath(), AddDLL.class);
int Add(int a, int b);
float AddFloat32(float a, float b);
double AddFloat64(double a, double b);
int AddInt32(int a, int b);
long AddInt64(long a, long b);
void VoidDemo();
String Greet(String name);
void ProcessArray(Pointer input, int length, Pointer output);
int FinalStep(); }
public static void main(String[] args) {
System.out.println("3 + 5 = " + AddDLL.INSTANCE.Add(3, 5));
System.out.println(" AddDLL.INSTANCE.Greet = " + AddDLL.INSTANCE.Greet("hello go")); AddDLL.INSTANCE.VoidDemo(); System.out.println(" AddDLL.INSTANCE.AddInt32 = " + AddDLL.INSTANCE.AddInt32(1, 2)); System.out.println(" AddDLL.INSTANCE.AddInt64 = " + AddDLL.INSTANCE.AddInt64(1, 2)); System.out.println(" AddDLL.INSTANCE.AddFloat32 = " + AddDLL.INSTANCE.AddFloat32(1, 2)); System.out.println(" AddDLL.INSTANCE.AddFloat64 = " + AddDLL.INSTANCE.AddFloat64(1, 2)); int[] inputs = {1, 2, 3, 4, 5}; int[] outputs = processArray(inputs); System.out.println("原始值:" + Arrays.toString(inputs) + " 输出值为:" + Arrays.toString(outputs)); System.out.println(" AddDLL.INSTANCE.FinalStep = " + AddDLL.INSTANCE.FinalStep()); }
public static int[] processArray(int[] input) { int elemSize = Native.getNativeSize(Integer.TYPE); Pointer inPtr = new Memory(input.length * elemSize); Pointer outPtr = new Memory(input.length * elemSize);
inPtr.write(0, input, 0, input.length);
AddDLL.INSTANCE.ProcessArray(inPtr, input.length, outPtr);
int[] output = new int[input.length]; outPtr.read(0, output, 0, output.length); return output; }
}
|