Я использую jni, чтобы шлепнуть графический интерфейс через какой-либо код последовательного порта, написанный на c ++ (который является потомком класса RS232).оригинальный c ++ работает нормально и непрерывно выводит пакеты данных на терминал.я написал действительно простой код 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;
}
этот код был по существу скопирован из main () оригинальной программы на c ++.тем не менее, соединение всегда прерывается при вызове из java (но всегда работает при вызове из c ++ main ()).во время отладки я отследил ошибку, возникшую в классе RS232 предка, до «RS232_NEXT_FREE_ERROR», которая, по-видимому, никогда не возникает при нормальных обстоятельствах (согласно моим поискам в Google).В настоящее время я использую VC ++ Express для создания DLL.ранее я установил соединение, генерирующее .dll с помощью wxdev, но отказался от него из-за множества других проблем.
Я знаю, что это, вероятно, какой-то странный крайний случай, но если кто-нибудь сможет пролить свет на то, что здесь происходит, я был бы очень признателен.