要在Java中調用C#方法并傳遞參數,你可以使用Java Native Interface (JNI) 和 Java Native Access (JNA) 庫。這里我將向你展示如何使用這兩種方法。
方法1:使用JNI
using System;
public class MyClass
{
[DllImport("Kernel32.dll")]
public static extern int Add(int a, int b);
}
javah
工具生成JNI頭文件:javah -jni MyClass
public class MyClassWrapper {
static {
System.loadLibrary("myclass");
}
public native int add(int a, int b);
public static void main(String[] args) {
MyClassWrapper myClassWrapper = new MyClassWrapper();
int result = myClassWrapper.add(3, 4);
System.out.println("Result: " + result);
}
}
javac MyClassWrapper.java
java MyClassWrapper
方法2:使用JNA
using System;
using System.Runtime.InteropServices;
public class MyClass
{
[DllImport("Kernel32.dll")]
public static extern int Add(int a, int b);
}
import com.sun.jna.*;
import com.sun.jna.ptr.IntByReference;
public class MyClassWrapper {
public interface MyLibrary extends Library {
MyLibrary INSTANCE = Native.load("myclass", MyLibrary.class);
int Add(int a, int b);
}
public int add(int a, int b) {
IntByReference aRef = new IntByReference(a);
IntByReference bRef = new IntByReference(b);
return MyLibrary.INSTANCE.Add(aRef.getPointer().intValue(), bRef.getPointer().intValue());
}
public static void main(String[] args) {
MyClassWrapper myClassWrapper = new MyClassWrapper();
int result = myClassWrapper.add(3, 4);
System.out.println("Result: " + result);
}
}
javac MyClassWrapper.java
java MyClassWrapper
這兩種方法都可以實現在Java中調用C#方法并傳遞參數。注意,這里的示例依賴于C#方法Add
接受兩個整數參數并返回它們的和。你可以根據需要修改C#方法的實現和參數類型。