私は、Linux(Ubuntu 11.04)およびWindows(XP)で実行されるDLL / SO( "C" externed)として組み込みC++アプリケーションを開発してきました。そのため、呼び出し元のアプリケーションがGUIを実行しているか、コンソールを実行しているか、どちらも実行していないかはわかりません。stdoutとstderrは、コンソールが接続されていないときにビットバケットを指していると思います。したがって、出力がページファイル/スワップファイルの無駄なスペースのどこかに文字通りあるのではないかと思いますが、coutまたはcerrに書き込むだけでは無害です。
したがって、私の現在の考えは、呼び出し元プログラムにコールバック関数(アドレス)を与え、その関数を(void)(*)(void *)のように見せることです。ここで、(void *)は呼び出し元のプログラムで明確に定義された構造体を指します。エラー/ステータス/その他の情報を書き込むことができる場所。以前、CとC ++で同様のことを行いましたが、少なくとも1人のC#呼び出し元がいることはわかっています。C#はそのようなコールバックを私に渡すことができますか?他の人が書くかもしれないデータを私が読むのに何か困難はありますか?
または、コンソールを開いてメッセージを書き込むこともできます。誰かがこれを行う方法を教えてもらえますか?
私はWindowsでメッセージボックスをポップアップするのを見ました、そして、thkatはするのが苦痛なことです。Linuxを見ていませんでした。誰かがchar*またはstd::stringsを使用した例を持っていますが、Windowsに必要なデータ型は何でもありませんか?
FWIW、私たちのアーキテクチャでは、ファイル、共有メモリ、名前付きパイプ、メッセージパッシング用のソケットはありません。また、プログラムとして書き込み可能なファイルの場所がわからないため、とにかくファイルに確実に書き込むことができなかったことを思い出してください。確かに、いくつかのsys opは、選択した場所へのユーザー書き込みを無効にします。アクセス可能なファイルパスとファイル名をユーザーが渡すことに依存する必要があります。
誰かが私の状況やアイデアについてコメントしてもらえますか?
どうもありがとう、
ウェス
コメント:fこれを正しく理解していますが、C ++ DLLライブラリからエラー/ステータス/デバッグメッセージをログに記録する適切な方法を見つけていますか?また、DLLコンシューマーのタイプ(C / C ++コンソール、C#GUI、..)についての知識がないため、stdoutに書き込んでも大丈夫かどうかわかりませんか?–m3rLinEz1時間前
まあ、正確ではありません。コンソールがないときにsdtout/stderrに書き込むと、出力がどこにも送信されず、スワップファイルが肥大化していないことを確認したいと思います。消費者に関係なく、stdoutに書き込んでも大丈夫だと思います。
それが実際に意味するのは、extern "C" DLLをC#プログラムにアタッチする方法を示し、プログラムにコールバックや変数/構造などを設定するために使用できるサンプルコードを教えてください。そして、そのアドレスをDLLに渡します。DLLは、var / struct/etcにデータを書き込むことができます。コールバックを呼び出します。W。