2011-11-30 3 views
0

Я использую jni для прошивки gui над кодом последовательного порта, написанным на C++ (который является потомком класса RS232). исходный C++ отлично работает и непрерывно выводит пакеты данных на терминал. Я написал какой-то действительно прямой jni-код в качестве отправной точки для моего приложения. в частности, я сделал логический метод на стороне C++ cni, который просто вызывает конструктор класса и возвращает, было ли соединение успешным. это выглядит так:Проблемы с последовательным портом 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; 
} 

Этот код был по существу скопирован из main() исходной программы на языке C++. однако соединение всегда вызывается при вызове из java (но всегда работает при вызове C++ main()). во время отладки я проследил за ошибкой, выведенной из класса предка RS232, в «RS232_NEXT_FREE_ERROR», который, по-видимому, никогда не встречается при нормальных обстоятельствах (согласно моим поисковым запросам Google). В настоящее время я использую vC++ express для создания dll. ранее я установил соединение, генерирующее .dll, используя wxdev, но отказался от него из-за множества других проблем.

Я знаю, что это, вероятно, какой-то странный край, но если кто-то может пролить свет на то, что здесь происходит, я бы очень признателен.

ответ

Смежные вопросы