簡體   English   中英

JNA的Void *示例

[英]Void* example for JNA

我一直在努力尋找JNA上關於void *示例的示例。 我試圖了解如何在JNA中使用Pointer。

例如

IN C:

int PTOsetApiOpt(int iOpt,void* lpValue,int iLen)

Parameters: iOpt: int
lpData: address from which data should be read.
iLen: length of data
returns int values : 0 as success or -1 as failure.

我們如何使用JNA在JAVA中編寫代碼? 我在JAVA中嘗試過

public MyTest{

 public interface MyLibrary extends Library {
   public int PTOsetApiOpt(int iOpt,Pointer lpValue,int iLen);

 }
 public static void main(String[] args) {
   MyLibrary myLib = (MyLibrary)MyLibrary.INSTANCE;
   int result = myLib.PTOsetApiOpt(1,new Pointer(0),1024);
 }

調用myLib.PTOsetApiOpt時,JVM崩潰。 我猜這是因為新的Pointer語句。 如何創建Pointer並將其用作參數而不會導致JVM崩潰? 我已經堅持了兩天。 任何提示都很好。 提前致謝。

問候,-Vid-

聲明您的方法以IntByReference作為參數,然后在調用該方法時不必調用ByReference.getPoint()。

我想我已經知道了。

這是我用Java編寫的方式。

void * lpValue可以是任何類型。 因此,在C中,它期望的是int值的地址。

 public MyTest{

 public interface MyLibrary extends Library {
   public int PTOsetApiOpt(int iOpt,Pointer lpValue,int iLen);

 }
 public static void main(String[] args) {
   MyLibrary myLib = (MyLibrary)MyLibrary.INSTANCE;
    IntByReference ir = new IntByReference(1);
    //got a result as 0 instead of -1.
    int result = myLib.PTOsetApiOpt(1, ir.getPointer() , ir.getPointer().SIZE);
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM