返回windows.h处理Java JNI

时间:2018-05-07 13:01:59

标签: java c windows serial-port java-native-interface

我有一个用C语言创建串口连接的方法,我们使用窗口HANDLE类型,

hCom = CreateFile( portNo,
                GENERIC_READ | GENERIC_WRITE,
                0,    // must be opened with exclusive-access
                NULL, // no security attributes
                OPEN_EXISTING, // must use OPEN_EXISTING
                0,    // not overlapped I/O
                NULL  // hTemplate must be NULL for comm devices
                );

因此,在特定的端口号上,我正在创建连接。现在我想将这个HANDLE类型返回给我的JNI .h程序。因此,下次我可以使用HANDLE类型进行操作,例如通过对象发送/接收,这将封装此HANDLE。

但我无法编写此HANDLE类型的JNI等效项以及如何将其保存到Java Object。有人可以帮忙吗?
另外,如果可以,我们可以从同一个Windows.h文件中进一步抛出DCB类型并在JNI对象中处理它

1 个答案:

答案 0 :(得分:1)

看看HANDLE的定义:

typedef void * HANDLE;

由于void指针不是一些复杂的内存结构,因此可以在Java中将其声明为long。对于32位体系结构而言int就足够了,但如果你只使用long 32位和64位就足够了。

DCB是一种结构。要在Java中使用它,您可以传输一个字节数组,但您必须知道(即从头文件计算)每个结构成员的索引才能访问它。如果为传输创建专用Java对象并在C代码中复制struct值,可能会更清楚。