http://www.hatena.ne.jp/1084006396
Cで書かれたプログラムの出力をC#で使いたいのですが、どうすればよいでしょうか? - 人力検索はてな
URLはダミーです
ちょっとこれだけでは分かりません
・GPSデータがファイルで存在して、Cのプログラムで読み込んで表示するのでしょうか?それともCのプログラムがリアルタイムにデータを吐き出すのでしょうか?
・Cのだすデータをリアルタイムに取得して、そのままC#でリアルタイムに処理しなければならないでしょうか?一度Cのプログラムを動かしてからC#で動かせばよいのでしょうか?
------------------------
・情報ファイルが存在するならCのプログラムをC#に移植した方が効率がいいです、リアルタイムに処理する必要があるのなら、移植しなければ実現は無理です
・一度Cで処理したデータでよいのであればファイルにリダイレクトしてファイル化して fread や ReadFileなどで 読み取ればよいのですが、いかがでしょうか?
http://www.atmarkit.co.jp/fdotnet/special/dotnet_sdk/dotnetsdk08...
特集:.NET Framework SDKで始める.NETプログラミング(前編) 7.Hello World展覧会(4)−マネージド C++−
マネージドCで Cの関数をマネージドクラスを作ってCの関数をラッピングするといけます。 僕もこの方法でC#からC++のクラス(ソース)をMC++でラッピングして使いました。
C#限定ではないですが・・・
先にC#で書いたアプリを起動して、そのアプリからCで書かれたソフトを起動するのが可能であるなら、Cアプリ起動時にパイプ接続(stdout をリダイレクト)して取り込めば良いと思います。
しかしソースがあるのなら、移植した方が確実だと思います。
C# と言っても、元々がC+++αみたいなもんだから移植と言うほどの手間はないです。
って、ラッピングは既出ですね(^^ゞ
なるほどー、ありがとうございます
リアルタイムだとそのままでは無理ですね^^;
・パイプ処理などを使うとCのプログラムの処理が終わってからC#の処理が動き始めます
・データをファイルにはき出させながら処理をする場合、C側のプログラムがファイルを共有しながら、データごとにOpen & Closeを繰り返しながら書き出して、C#側で共有しながらポインタを保存して読み出し専用でアクセスしなければなりません
1.プロセス間通信をするコードをC側に追加してデータをC#に投げる
2.メモリマップドファイルするコードをC側に追加してデータをC#と共有してアクセス
3.Windowsメッセージを投げるコードをC側に追加してデータをC#で受け取る
4.localhostでデータを投げるTCPかUDP ClientプログラムをC側に追加して、C#側でサーバプログラムを作って受け取る
と言う方法がありますが、いっそC#にコードを書き換えて移植してしまった方がいいと思います。CのソースがそのままC#で使える方法は知らなかったので(2の方の回答でいけるかもしれませんが、よくわかりせん)書き直さなければならないのではないでしょうか
VC++のMFCアプリケーションに移植ならそれほど手間はかからないと思うのですが、C#上でCのソースを扱ったことが無いので何ともいえません
みなさんありがとうございました。
方向性がわかりました。
「Cのだすデータをリアルタイムに取得して、そのままC#でリアルタイムに処理しなければならない。」
です。無理でしょうか・・。
移植するならCの関数をC#で使いたいのですが、出来るのでしょうか。