2011-11-30 79 views
0

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

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

回答