コールバック関数をDLL内に配置できますか?
-
09-10-2019 - |
質問
Unity3Dエンジンを使用する別のプログラムの.NET SerialPortメソッドを使用しようとしています。
シリアルポートがいくつかのデータを受信したときにコールバック関数を登録および実装するAC#クラスライブラリ(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_datareceeeceeceeceがコールバックされるかどうかを知りたいのですが。別のプログラムからライブラリ内で_combufferを読み込もうとしていますが、常に空になります(同じアプリ内のコンソールアプリでテストしたときにデータが来ていても)。
どんな助けも大歓迎です。
ありがとう
解決
<HUNCH>
私がクラスデザイナーだったら、データをコールバックに入れますので、 SerialDataReceivedEventArgs
クラスでは、その内部がデータをバッファリングしていることがわかります。
したがって、イベントを取得してから読み取りを呼び出した後、実際に送信されるデータを破棄してさらにリクエストします。
言い換えれば、はい、それが外部ライブラリであるという事実は、それが必要としていないという事実とは何の関係もありません。
</HUNCH>
他のヒント
通常、アクセス修飾子が正しく設定されている限り、メソッドが別のDLLにあることについて特に特別なものはありません。
ただし、ソリューションの設定方法によっては、Binフォルダーに最新のDLLがあることを確認するのは痛みになる可能性があります。
所属していません StackOverflow