Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过JNA调用Delphi方法时内存访问无效_Java_Delphi_Jna - Fatal编程技术网

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

Java 通过JNA调用Delphi方法时内存访问无效,java,delphi,jna,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/钻孔检验批质量验收

我试图调用以下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);
}

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

请与供应商联系,并要求提供一个可从除Delphi以外的语言使用的库。这将需要用两个参数替换动态数组。数组的长度和数组开头的地址


如果这是不可能的,您将需要在Delphi中编写一个适配器模块

请记住从StdCallLibrary而不是Library进行扩展。因此,感谢Delphi TByteDnarray-->JAVA字节[],我解决了这个问题