làm cách nào để truy cập các hàm .lib/.dll tuỳ chỉnh bằng JNA? Ai đó có thể cung cấp một ví dụ?Sử dụng JNA để liên kết tới dll tùy chỉnh
Cảm ơn bạn.
làm cách nào để truy cập các hàm .lib/.dll tuỳ chỉnh bằng JNA? Ai đó có thể cung cấp một ví dụ?Sử dụng JNA để liên kết tới dll tùy chỉnh
Cảm ơn bạn.
Ví dụ (from Wikipedia):
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.Native;
/** Simple example of Windows native library declaration and usage. */
public class BeepExample {
public interface Kernel32 extends StdCallLibrary {
// FREQUENCY is expressed in hertz and ranges from 37 to 32767
// DURATION is expressed in milliseconds
public boolean Beep(int FREQUENCY, int DURATION);
public void Sleep(int DURATION);
}
public static void main(String[] args) {
Kernel32 lib = (Kernel32) Native.loadLibrary("kernel32",
Kernel32.class);
lib.Beep(698, 500);
lib.Sleep(500);
lib.Beep(698, 500);
}
}
Trong trường hợp này, chúng ta tải nó từ thư viện "kernel32.dll". Tôi hy vọng điều này làm cho JNA rõ ràng hơn.
EDIT: Tôi sẽ giải thích mã: Bạn cần xác định giao diện (mở rộng com.sun.jna.Library) bằng các chức năng bạn cần từ thư viện. Sau đó, gọi com.sun.jna.Native.loadLibrary ("LibraryName", InterfaceName.class). Cuối cùng, lưu trữ đầu ra trong một biến với loại giao diện. Chỉ cần gọi các hàm từ biến đó.
Bạn nên mở rộng StdCallLibrary cho ví dụ cụ thể mà bạn đã cung cấp. Có hay không nó áp dụng cho thư viện tùy chỉnh của người dùng phụ thuộc vào những gì gọi quy ước mà thư viện sử dụng. – technomage
làm thế nào để cung cấp đường dẫn cho dll tùy chỉnh của tôi, tôi có nghĩa là nếu dll của tôi nằm đâu đó trong e:/Mydll. sau đó làm thế nào để cung cấp đường dẫn và nếu Mydll được thực hiện bằng cách sử dụng một số dll và thư viện khác thì tôi cần phải cung cấp đường dẫn một nơi nào đó cho các dll cũng? – Jony