通过JNA调用Delphi方法时内存访问无效

时间:2017-06-05 02:15:48

标签: java delphi jna

我试图调用以下Delphi方法:

  

但是,我得到了这个例外:

  

这是我的代码:

public static void main(String[] args) throws Exception {
    //解决中文乱码a
    System.setProperty("jna.encoding", "GBK");  
    byte[] b = FileUtil.file2ByteArray("C:/Users/Administrator/Desktop/work/jyp/dll/钻孔检验批质量验收记录表.LIL");
    System.out.println(b);
    String nn = "llllllllllll";

    //System.out.println(testdll.Instance.PBF_RepToPDF_File("C:/Users/Administrator/Desktop/work/jyp/dll/1啊.LIL","C:/Users/Administrator/Desktop/work/jyp/dll/1_File.PDF" ));
    //JYP_TK_ReportDLL.Instance.PBF_RepToPDF_File("C:/Users/Administrator/Desktop/work/jyp/dll/1啊.LIL","C:/Users/Administrator/Desktop/work/jyp/dll/1_File.PDF" );
    JYP_TK_ReportDLL.Instance.PBF_RepToPDF_Stream("C:/Users/Administrator/Desktop/work/jyp/dll/1.PDF",nn);
    //JYP_TK_ReportDLL.Instance.PBF_RepToJPG_File("C:/Users/Administrator/Desktop/work/jyp/dll/1啊.LIL","C:/Users/Administrator/Desktop/work/jyp/dll/1_File.JPG" );
}

public interface JYP_TK_ReportDLL extends Library {
    JYP_TK_ReportDLL Instance = (JYP_TK_ReportDLL) Native.loadLibrary("JYP_TK_ReportDLL",
            JYP_TK_ReportDLL.class);

    boolean PBF_RepToPDF_Stream(String SaveFile, String arr);
    boolean PBF_RepToPDF_File(String SourceFile, String  SaveFile);
    boolean PBF_RepToJPG_File(String SourceFile, String  SaveFile);
}

1 个答案:

答案 0 :(得分:2)

不可能从非Delphi模块调用该方法。第二个参数是Delphi本机动态数组。您无法直接从Java模块中创建其中一个。

联系供应商并请求一个可以使用Delphi以外语言的库。这将要求动态数组被两个参数替换。数组的长度,以及数组起始地址。

如果不可能,您需要在Delphi中编写适配器模块。