2016-12-12 61 views
0

私はロボットシミュレーションのシナリオを書いています。ロボットはCでプログラミングされ、特殊なAPIへの呼び出しを使用します。DLLへの呼び出しからAPIへの呼び出し

私の計画は、DLLにロボットプログラムをコンパイルすることです。シミュレーションの開始時に、そのDLLのメイン関数を呼び出して起動させます。

私が持っている問題は、DLLが通信する方法です。これを擬似コードで例を挙げておきます。

ロボットプログラムは単純に "SetLeftWheelSpeed(100)"と "Wait(1500)"で、左のホイールを動かして1.5秒待っているとします。

私はロボットのプログラムを呼び出すと、シミュレータと通信するためにSetLeftWheelSpeed(intスピード)を取得する方法はありますか?私はあなたがメソッドを呼び出すツールのライブラリとしてDLLを考えると、それはあなたに戻ります。私はそれをループで実行し続ける必要があるので、私は思っていない戻り値を使うことはできません。

編集:

さらに多くの考えが私に根本的な問題をもたらしました。私の例では、車輪の移動などの定義がないため、ロボットコードをコンパイルできませんでした。このためには、シミュレータにあるAPIにリンクする必要があります。 APIをロボットコードにリンクし、ロボットコードをシミュレータにリンクさせ、シミュレータをAPIにリンクさせて、それが行うべきことを実装する必要があります。

+0

@pseudoadbulの複製であると思う:おそらくC#1にデータをプッシュするDLLのための方法はたくさん、最も簡単なの一つは、そのパイプにメッセージを書き込むことであろうC#コードはストリームを使用して読み取り中です。それは、C#コードがロボットドライバに返す値を設定するかどうか、または単に見ているかどうかによって異なります。 –

+0

ありがとう、私はこれを調べます。しかし、はい、コミュニケーションは両方の方法でなければなりません。 – pseudoabdul

+0

あなたはC#の代理人の使い方を知っていますか? p/invokeを通過すると、それらは関数ポインタになり、ネイティブコードがc#コードにコールバックすることができます。ネイティブコードからのコールバックはガベージコレクタから隠されるため、デリゲートが到達不能にならないようにする必要があります。 –

答えて

0

はい、可能です。

このチュートリアルではCode Projectをご覧ください。

また、私はそれがHow to call C++ DLL in C#またはIs it possible to call a C function from C#.Net

+0

ありがとうございますが、私はすでにこれらのリンクをすべて読んでいます。問題は、DLLを介して関数を呼び出すことではありません。それは私が考え出したほどです。問題は、シミュレータのAPIプログラムを呼び出すことができるようにDLLを通信する方法です。 – pseudoabdul

+0

あなたは同じことをしなければならないでしょうが、CからC#へ。この質問を確認してください。 http://stackoverflow.com/questions/4428267/calling-c-sharp-from-c – Prajwal

関連する問題