私はjniを使用して、C++(RS232クラスの子孫)で書かれたシリアルポートコードを使ってguiをスラップしています。オリジナルの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"にトレースしていましたが、これは明らかに通常の状況では発生しません(私のGoogle検索によると)。私は現在、DLLを生成するためにvC++ expressを使用しています。以前は、wxdevを使って.dllを生成する接続を確立しましたが、他の多くの問題のためにそれを中止しました。
私はこれがおそらくいくつかの奇妙なエッジケースであることは知っていますが、誰かがここで何が起こっているかについての光を当てはめることができれば、本当に感謝します。