Unity3Dエンジンを使用する別のプログラムの.Netシリアルポートメソッドを使用しようとしています。dllの中にコールバック関数を置くことはできますか?
シリアルポートが何らかのデータを受け取ったときにコールバック関数を登録し実装するC#クラスライブラリ(dll)があります。
public CSerialDll()
{
_serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}
void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
int bytes = _serial.BytesToRead;
_comBuffer = new byte[bytes];
_serial.Read(_comBuffer, 0, bytes);
Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer));
}
私の別のプログラムでは、クラスのインスタンスを作成します。
ライブラリ(dll)内の私のコールバックserial_DataReceivedが呼び出されるかどうかを知りたいと思います。私はライブラリ内の_comBufferを別のプログラムから読み込もうとしています。同じアプリケーション内のコンソールアプリケーションでテストしたときにデータが出てきても、常に空です。
ご協力いただきまして誠にありがとうございます。私はクラスの設計者だった場合は、SerialDataReceivedEventArgs
クラスを見れば、あなたはその中にあなたがバッファされていることがわかりますので、私は、コールバックにデータを置く
おかげ
これは私が独自のシリアルポートライブラリを書いた方法ですが、見た目からは、Microsoftの 'Serial.IO.Ports'ライブラリを使用しています。これは実際にイベントを取得した後にデータを読み込まなければならないイベントに添付されていません。実際には、Microsoftの 'SerialPort'クラスではうまくいきません。 –