私はロボットシミュレーションのシナリオを書いています。ロボットはCでプログラミングされ、特殊なAPIへの呼び出しを使用します。DLLへの呼び出しからAPIへの呼び出し
私の計画は、DLLにロボットプログラムをコンパイルすることです。シミュレーションの開始時に、そのDLLのメイン関数を呼び出して起動させます。
私が持っている問題は、DLLが通信する方法です。これを擬似コードで例を挙げておきます。
ロボットプログラムは単純に "SetLeftWheelSpeed(100)"と "Wait(1500)"で、左のホイールを動かして1.5秒待っているとします。
私はロボットのプログラムを呼び出すと、シミュレータと通信するためにSetLeftWheelSpeed(intスピード)を取得する方法はありますか?私はあなたがメソッドを呼び出すツールのライブラリとしてDLLを考えると、それはあなたに戻ります。私はそれをループで実行し続ける必要があるので、私は思っていない戻り値を使うことはできません。
編集:
さらに多くの考えが私に根本的な問題をもたらしました。私の例では、車輪の移動などの定義がないため、ロボットコードをコンパイルできませんでした。このためには、シミュレータにあるAPIにリンクする必要があります。 APIをロボットコードにリンクし、ロボットコードをシミュレータにリンクさせ、シミュレータをAPIにリンクさせて、それが行うべきことを実装する必要があります。
@pseudoadbulの複製であると思う:おそらくC#1にデータをプッシュするDLLのための方法はたくさん、最も簡単なの一つは、そのパイプにメッセージを書き込むことであろうC#コードはストリームを使用して読み取り中です。それは、C#コードがロボットドライバに返す値を設定するかどうか、または単に見ているかどうかによって異なります。 –
ありがとう、私はこれを調べます。しかし、はい、コミュニケーションは両方の方法でなければなりません。 – pseudoabdul
あなたはC#の代理人の使い方を知っていますか? p/invokeを通過すると、それらは関数ポインタになり、ネイティブコードがc#コードにコールバックすることができます。ネイティブコードからのコールバックはガベージコレクタから隠されるため、デリゲートが到達不能にならないようにする必要があります。 –