溫馨提示×

java調用c#如何傳遞參數

小樊
150
2024-12-01 16:12:17
欄目: 編程語言

要在Java中調用C#方法并傳遞參數,你可以使用Java Native Interface (JNI) 和 Java Native Access (JNA) 庫。這里我將向你展示如何使用這兩種方法。

方法1:使用JNI

  1. 首先,創建一個C#類并導出需要調用的方法:
using System;

public class MyClass
{
    [DllImport("Kernel32.dll")]
    public static extern int Add(int a, int b);
}
  1. 然后,使用Java的javah工具生成JNI頭文件:
javah -jni MyClass
  1. 創建一個Java類,實現生成的JNI頭文件中的本地方法:
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);
    }
}
  1. 編譯并運行Java程序:
javac MyClassWrapper.java
java MyClassWrapper

方法2:使用JNA

  1. 首先,創建一個C#類并導出需要調用的方法:
using System;
using System.Runtime.InteropServices;

public class MyClass
{
    [DllImport("Kernel32.dll")]
    public static extern int Add(int a, int b);
}
  1. 創建一個Java類,使用JNA庫調用C#方法:
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);
    }
}
  1. 編譯并運行Java程序:
javac MyClassWrapper.java
java MyClassWrapper

這兩種方法都可以實現在Java中調用C#方法并傳遞參數。注意,這里的示例依賴于C#方法Add接受兩個整數參數并返回它們的和。你可以根據需要修改C#方法的實現和參數類型。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女