jni串口问题

时间:2011-11-30 17:50:36

标签: java c++ visual-c++ java-native-interface serial-port

我正在使用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的连接,但是由于许多其他问题而放弃了它。

我知道这可能是一些奇怪的边缘情况,但如果有人能够了解这里发生的事情,我会非常感激。

1 个答案:

答案 0 :(得分:0)

强烈建议:看看Rxtx

以下是一些链接:

http://rxtx.qbang.org/wiki/index.php/FAQ

http://en.wikibooks.org/wiki/Serial_Programming/Serial_Java

另外:如果您愿意,这里是JavaComm上的一个(有点旧!)链接:

http://edn.embarcadero.com/article/31915