【问题标题】:Unable to open the port by calling Native method from ITLSSPProc.dll无法通过从 ITLSSPProc.dll 调用 Native 方法打开端口
【发布时间】:2013-01-25 11:53:27
【问题描述】:

这是来自 ITLSSPProc.dll 的本机方法

NOMANGLE int CCONV OpenSSPComPort (SSP_COMMAND * cmd);

这里,SSP_COMMAND 是 C++ 中的 ITLSSPProc.dll 中的结构 语言。

struct SSP_COMMAND
{
unsigned long BaudRate;
unsigned char PortNumber;
};

所以,我必须使用 Java 访问 OpenSSPComPort (SSP_COMMAND * cmd) JNI。这是我写的代码,

public class Main {
    public interface ITLSSPProc extends Library {
     ITLSSPProc INSTANCE = (ITLSSPProc) Native.loadLibrary(
            (Platform.isWindows() ? "ITLSSPProc" : "simpleDLLWindowsPort"), ITLSSPProc.class);

        int OpenSSPComPort(Pointer param); 
        int CloseSSPComPort();                    
    }

    public static void main(String[] args)throws IOException {

     ITLSSPProc sdll = ITLSSPProc.INSTANCE;

        Memory intMem = new Memory(10); // allocating space
        intMem.setLong(0,9600);
        intMem.setString(1,"com7");        

        if(sdll.OpenSSPComPort(intMem)==1)
        {// calling function with int parameter&result
            System.out.println("connected");
        }
        else
        {
            System.out.println("failed");
        }
     }
}

Output : failed

端口号是我们正在使用的 COM7。所以,当我运行这个 应用程序,并且当我按照用户中给出的手动传递波特率时 手动,如果端口号正确,则必须打印“已连接” 安慰。所以,任何人都知道我哪里出错了,我不明白 实际问题在哪里..

【问题讨论】:

  • 阅读有关类型映射的 JNA 文档,特别是 w/r/t 映射原生 longcharstruct 类型。

标签: java dll java-native-interface jna


【解决方案1】:

JNA documentation for basic types (long, char)。

JNA documentation for aggregate types (struct, struct *)。

// tl;dr
class SSP_COMMAND extends Structure {
    public NativeLong BaudRate;
    public byte PortNumber;
}

int OpenSSPComPort(SSP_COMMAND param)

【讨论】:

  • 但是如果我将 BaudRate 作为 NativeLong,我如何将值 9600 传递给 BaudRate,因为这是文档中给出的默认值。
  • 我们已经检查了连接硬件的端口号是COM7,那么我怎样才能将这个值作为字节传递......
  • 根据问题here,以上不是完整或正确的SSP_COMMAND定义。
  • 你知道任何查看 dll 文件内容的方法吗,我搜索并得到了 s/w "Depends" 但它只显示方法名称而不是参数,所以请帮我查看 dll 文件的内容.
  • 该信息不包含在 DLL 中,除非它嵌入了调试信息。您需要找到原始 API 文档或something comparable
猜你喜欢
  • 2017-03-27
  • 1970-01-01
  • 2020-08-31
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多