我正在使用jni来打击一些用c ++编写的串口代码(这是RS232类的后代)。原始的c ++工作正常并不断地将数据包输出到终端。我写了一些非常简单的jni代码作为我的应用程序的起点。具体来说,我在jni的c ++端创建了一个布尔方法,它只调用类构造函数并返回连接是否成功。它看起来像这样:
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的连接,但是由于许多其他问题而放弃了它。
我知道这可能是一些奇怪的边缘情况,但如果有人能够了解这里发生的事情,我会非常感激。
答案 0 :(得分:0)
强烈建议:看看Rxtx
以下是一些链接:
http://rxtx.qbang.org/wiki/index.php/FAQ
http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java
另外:如果您愿意,这里是JavaComm上的一个(有点旧!)链接: