Я использую 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, но отказался от него из-за множества других проблем.
Я знаю, что это, вероятно, какой-то странный край, но если кто-то может пролить свет на то, что здесь происходит, я бы очень признателен.