2012-03-12 7 views
0

2つの依存プロジェクトからなるVS2005ソリューションプロジェクトがあります。このプロジェクトは、デバイスと通信し、デバイスから何らかの出力を得るCコンソールアプリケーションです。このプロジェクトは古いプロジェクトであり、私によって書かれたものではありません。私は電気電子工学者であり、主にプロジェクト用にC言語を使用しています。私はC++とC#についてはそれほど知りません。しばらくの間、私はVS2010とC++フォームアプリケーションを扱っています。私は基本を得るが、いくつか問題がある。私はこのコンソールプロジェクトのGUIを追加したいと思います。私はこの目的のために申請書をデザインしました。コンソールアプリケーションでプロセスを開始するボタンと、出力用にRichTextboxを持つボタンがあります。VS2010マルチプロジェクトソリューション - コンソールとフォームアプリケーション

ボタンをクリックしてwinformアプリケーションからコンソールプロジェクト内の関数を呼び出す必要があります。私はその関数をループで呼び出して連続的な読みをしたいと思っています。

"console.exe"ファイルを呼び出してwinformプロジェクト内で実行しようとしましたが、出力をrichtextboxにリダイレクトしようとしましたが、プロジェクトが遅すぎました。私は自分のデバイスから連続して読み続ける必要があります。

これを行うにはどのような方法が最適ですか?私は私のCコンソールアプリケーションをWindowsフォームアプリケーションに変換したい。

ありがとうございます。

答えて

0

CはC++のサブセットであるため、CLRプログラムのCソースコードをC++プロジェクトにコンパイルして、GUIから直接呼び出すことができるライブラリとして使用することができます。 Check out this question for how to get started on doing this

ほとんどの場合、いくつかの調整が必要ですが、これまで使用されていたのとほぼ同じようにCコードを使用できるはずです。 Here's another related stack overflow question.

+0

ありがとうございます。試してみます。 –

0

通常、コンソールアプリケーションから既存のロジックをクラスライブラリプロジェクトに移動または変換します。次に、このクラスライブラリへの参照をフォームプロジェクトに組み込みます。次のフォームプロジェクトでは、UIスレッドをブロックしないように別のスレッドからライブラリメソッド(たとえばボタンを押したとき)を呼び出します。 ATTN! RichTextBoxを結果で更新する場合、Invokeメソッドを呼び出してクロススレッド操作を実行する必要があります(関連トピックについてはhereを参照)。

+0

私はクラスライブラリについてあまり知りません。私は前にクラスライブラリを書いていませんでした。私のCソースプロジェクトには、たくさんの ".hヘッダー"が含まれています。 extern "C"構造でそれらを含めるべきですか?私はあなたの提案を試みます。ありがとうございました。 –

1

EXE内の関数を別のEXEから直接呼び出すことはできません。

ここでは、どれくらいの仕事をしたいのか、古いプロジェクトの長期的な目標に応じていくつかのオプションがあります。

  1. コンソールプロジェクトから関連するコードをフォームプロジェクトにコピーするだけです。これは、コンソールプロジェクトが廃止され、それをサポートする予定がなくなった場合に最適です。

  2. コンソールプロジェクトの関連コードをライブラリ(DLL)プロジェクトに移動し、コンソールとフォームアプリケーションの両方から参照します。これは、あなたのコンソールプロジェクトのコードが比較的隔離されている場合に働きます(例えばグローバル変数などがたくさんありません)。

  3. コンソールプロジェクトに何らかのIPCメカニズムを追加しますパイプなど)を使用してフォームプロジェクトから直接データを取得することができます。これは、あなたが「別のEXEから1つのEXEで関数を呼び出す」という本来の目的に近づけることができますが、はるかに多くの作業です。

+0

ありがとうございます。コンソールプロジェクトは廃止されました。私たちはそれを必要としません。私はコンソールアプリケーションのソースコードを持っています。 EXEの内部で関数を呼び出すつもりはありません。私はwinformアプリケーションに変換するためのソースを使用したい。私はあなたの提案を試みます。 –

関連する問題