【问题标题】:Pass Delphi dll function parameter pchar from java JNA从java JNA传递Delphi dll函数参数pchar
【发布时间】:2019-08-28 17:51:41
【问题描述】:

我有一个 .dll 文件。 Delphi语言开发的dll文件。有一个方法getKeyPadStatus。该方法有四个参数。这是函数:

function GetKeyPadStatus(var addr:byte; var pstatus,pnumber:pchar;var ptocounter:byte):boolean;stdcall;

现在我想使用 JNA 从 java 调用这个函数。这是我的java代码:

public class TestKeyPad {

static boolean flag = false;
public interface NativeExample extends Library {

    public boolean initPort(byte port);
    public boolean ScanKeyPad(byte addr, int waithum);
    public boolean getKeyPadStatus(byte addr, String pstatus, String pnumber, byte ptocounter);

}

public static void main(String[] args) {
    NativeExample nativeExample = (NativeExample) Native.loadLibrary("KeyPad", NativeExample.class);

    flag = nativeExample.initPort((byte)1);
    System.out.println("Init value : " + flag);

    flag = nativeExample.ScanKeyPad((byte)5, 2);
    System.out.println("Scan value : " + flag);

    flag = nativeExample.getKeyPadStatus((byte)5,  "L",  "0", (byte)5);
    System.out.println("pstatus value : " + flag);
}
}

但我遇到了错误。我发现的错误是:

Init value : true
Scan value : true
Exception in thread "main" java.lang.UnsatisfiedLinkError: Error looking   up function 'getKeyPadStatus': The specified procedure could not be found.

at com.sun.jna.Function.<init>(Function.java:245)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:566)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:542)
at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:528)
at com.sun.jna.Library$Handler.invoke(Library.java:228)
at com.sun.proxy.$Proxy0.getKeyPadStatus(Unknown Source)
at call_dll.TestKeyPad.main(TestKeyPad.java:38)

那么,如何将 pchar 值从 java 发送到 delphi 函数?如果我能得到这个解决方案,那就太好了。

【问题讨论】:

  • 信息不足。 var 参数可能是输入/输出。您需要查阅调用该函数的文档或示例代码。
  • 另外,DLL 是用哪个版本的 Delphi 编写的?这对于了解 PChar 是否映射到 PAnsiCharPWideChar 非常重要,这将影响 Java 代码必须如何将字符串数据编组到 DLL 或从 DLL 编组。
  • ISTM,Java 根本找不到“GetKeyPadStatus”,因为它正在寻找“getKeyPadStatus”。可能还有其他问题,但这似乎是第一个问题。

标签: java delphi dll


【解决方案1】:

我的方法名称错误。它将是“GetKeyPadstatus”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多