2011-12-13 11 views
3

どうすればいいですか?たとえば、C++メインアプリケーションで例外が発生した場合、GUIアプリケーションに何かを送信するにはどうすればよいですか?簡単な例があれば分かるはずです。C++メインアプリケーションからC#GUIアプリケーションに値を返す方法は?

+1

これは、どのように処理するかによって異なります。あなたは両方のアプリケーションを完全にコントロールしているなら、C#アプリケーションからも知られているエラーコードをtry catchとcatchで返すことができます。 –

+1

GUIアプリケーションはC++アプリケーションを起動しますか? – hmjd

+0

はい、GUIはフロントエンドであり、C++のメインアプリケーション – taker

答えて

2

C#のGUIアプリケーションはC++コンソールアプリケーションを起動した場合、その後、後者の終了コードmain()関数の戻り値)が前者によってアクセスすることができる、ここでの例を参照:Process.ExitCodeを。一般的な解決方法は、InterProcess Communication(IPC)という形式を使用することです。 Windowsの例:hereおよびhere

+0

ExitCodeは私の現在の目的にとって十分です。ありがとう – taker

+0

あなたは大歓迎です:) – kol

0

C++の2つのアプリケーションが異なるプロセスであると仮定すると、それはできません。 (子プロセスでは0〜255の間のエラーコードをexitと返すことがあり、親プロセスではwaitpidとなります)。

(少なくともLinuxでは)テキストの双方向チャンネル(名前付きまたは匿名のパイプ、またはAF_UNIXソケットを持つLinux上)を持ち、2つのプロセス間のプロトコルを定義することができます。

+0

-1に "can not do"という引数を渡します.C++アプリはC#アプリにエラーに関する情報を*送ることができます。 C#のプロセスがC++のプロセスを開始した場合は、stderrを簡単に取得したり、通信にパイプを使用したりすることができます。プロセスが独立して開始された場合、名前付きパイプ、ソケット、または共有メモリを使用できます。 –

+0

私は同意しません.C++アプリはそれを直接行うことはできません。それは(あなたと私が示唆しているように)いくつかのアプリケーション固有のプロトコルを定義することです。 C++のプロセスからC#に例外を送信する直接関数呼び出しはありません(少なくともLinuxの世界ではC#はMonoです)。 –

+0

OPはC++の例外を再投げているような何かを求めませんでしたCLR例外として。問題は「GUIアプリケーションに**何か**をどのように送っているのか」(強調する鉱山)でした。 "できない"というあなたの答えはばかげています。*何かを返すことは、例外をstderrに書くのと同じくらい簡単です。 –

0

あなたのアプリケーションが終了すると思われるC++アプリケーションで例外が発生した場合は、あまり明確ではありませんか? アプリケーションが時にエラーhapend終了すると仮定した場合:それのerrorCodeは整数あなたのCをexwcuteプロセスのためのあなたのC#アプリケーションで

  • であるあなたのC++コードで

    1. エラーは、「終了(のerrorCode)」を使用して起こっ++ exe、Exitedイベントの登録ハンドラ(プロセスのEnableRaisingEventsがtrueに設定されていることを確認してください)。
    2. あなたのイベントハンドラでは、あなたのC++ exeを実行するプロセスオブジェクトの "ExitCode"を読んでください。

    が、あなたのC++エラーを処理し、単にGUIを通知するアプリケーションでは、一つの解決策がある場合:

    1. C++アプリケーションでエラーがで
    2. 一つのファイルに書き込みエラー起こったときC#アプリケーションでは、このファイルを読み込むスレッドを1つ作成し、ファイルの内容が変更されたときには、1つのイベントをメインスレッドに送ります。

    注:2 proccessのTHERの間の通信のためには、複数の方法は、このテキストヘルプあなたかもしれ次のとおりです。http://en.wikipedia.org/wiki/Inter-process_communication

  • +0

    C++アプリケーションは、終了する前に何かをC#GUIに返します。 – taker

    0

    一つの方法は、WCFサービスを使用することです。私は最近、別のマシンのC++/CLIアプリケーションと通信する必要があったC#GUIを1台のマシンに書きました.WCFを通じて情報(エラーメッセージを含む)を交換しただけで、1台のマシンで同様に動作します。さらに、このアプローチはWCFを学ぶための言い訳です。

    関連する問題