我正在使用jni拍一些用C++编写的串口代码(这是RS232类的后代)。原来的C++工作正常,并不断向终端输出数据包。我写了一些非常直接的jni代码作为我的应用程序的起点。具体来说,我在jni的C++端做了一个布尔方法,它简单地调用类构造函数并返回连接是否成功。它看起来像这样:jni串行端口问题
const string &port_name = "COM7";
const long baud_rate = 19200;
const char parity = 'N';
const int word_size = 8;
const int stop_bits = 1;
const int xon_xoff = 0;
const int rts_cts = 0;
const int dtr_dsr = 0;
SerialPort *m_pPort = new SerialPort(port_name,
baud_rate,
parity,
word_size,
stop_bits,
UNCHANGED,
UNCHANGED,
xon_xoff,
rts_cts,
dtr_dsr);
if (m_pPort->ErrorStatus() == RS232_SUCCESS) {
int check_state = BST_INDETERMINATE;
switch (m_pPort->Dtr()) {
case 0 : check_state = BST_UNCHECKED; break;
case 1 : check_state = BST_CHECKED; break;
}
check_state = BST_INDETERMINATE;
switch (m_pPort->Rts()) {
case 0 : check_state = BST_UNCHECKED; break;
case 1 : check_state = BST_CHECKED; break;
}
return true;
} else {
return false;
}
此代码基本上从原始C++程序的main()复制。然而,从java调用连接总是失败(但从C++ main()调用时总是可用)。在调试的时候,我将从祖先RS232类抛出的错误追溯到“RS232_NEXT_FREE_ERROR”,这在正常情况下根据我的谷歌搜索显然是不会发生的。我目前使用vC++ express来生成dll。以前,我建立了一个使用wxdev生成.dll的连接,但由于其他许多问题而放弃了它。
我知道这可能是一些奇怪的边缘情况,但如果任何人都可以对这里发生的事情有所了解,我会非常感激。