0

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

NOMANGLE int CCONV OpenSSPComPort (SSP_COMMAND * cmd);

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

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

因此,我必须使用 JNI 在 java 中访问 OpenSSPComPort (SSP_COMMAND * cmd)。这是我写的代码,

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。因此,当我运行此应用程序并按照用户手册中给出的手动传递波特率时,如果端口号正确,则必须在控制台上打印“已连接”。所以,任何人都知道我哪里出错了,我不明白实际问题在哪里..

4

1 回答 1

0

基本类型( long, char)的 JNA 文档。

聚合类型( struct, struct *) 的 JNA 文档。

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

int OpenSSPComPort(SSP_COMMAND param)
于 2013-01-25T14:18:10.373 回答