• 締切済み

C#のプログラムをC++で読み出す方法

初心者的な質問で申し訳ございません。 C#のプログラムをC++で読み出すことはできるでしょうか。 可能ならどのように書いたらいいのでしょうか

みんなの回答

回答No.4

メソッドを呼び出すならCOMのIDispatch::Invokeインターフェースを使用すればできますよ。 後はC#側のメソッドをCOMインターフェース公開しておかないといけません。 まあ、件のC#側がスタンドアローンなのかクラスライブラリなのかによって更なる取り扱いが変わってきますが、どちらにしろC#側にも相応の改良が必要になるかと思います。 http://msdn.microsoft.com/en-us/library/windows/desktop/ms221479(v=vs.85).aspx

  • ppiiyyoo
  • ベストアンサー率0% (0/1)
回答No.3

あまり正確なことはかけませんがアドバイス程度で… C#って未だにネイティヴ実装はないのでリンクは無理だと思います。今回はネイティヴなC++オブジェクトとIL(っていうんでしたっけ?.Netのアセンブラって)なので、普通のリンカはネイティヴ同士じゃないと無理ですよね。 でC++/CLIです。こいつはネイティヴとCLR(っていうんでしたっけ?答えるはずが、確認ばっかりですね。いい加減ですいません)をくっつける糊の役目をします。しかもMC++と異なりかなり自然にコードできます。 なのでC++のクラスとC#のクラスをC++/CLIでコントロールするコードを書けばOKです。VB、C#、C++を混在させてよく使っているのですが、問題なく動作します。よほどトリッキーなことをしない限り大丈夫だと思います。 ※boostのtestは無理でした。エントリポイントを別途用意しているのでC++/CLIのロードができないようです。というような事をしなければOKのはずです。boostなんかも全然混在させてコード可能です。 C++/CLIなら、他のCLRのコードを突っ込めばそのままアセンブリになって取り込むことで利用可能です。C#のクラスを突っ込めばアセンブリとしてDLLになります。エクスプローラみたいなペインのプロジェクトのプロパティから共通設定を開いて参照ってところにC#のネームスペースを入れれば扱えるようになります。 実行時には当然アセンブリが必要です。こいつもexeでリンクしてやれるかってうことになるとよくわかりません。でもC++/CLI自体もVMな部分をexeにしているのでリンカをうまく使えばできるかもしれませんね。そこら辺は調べたことがありません。 C++ネイティヴと.Net(マネージドヒープ)なオブジェクトをクラスに混在させるとVCが騒ぎます。クラス単位でメモリ管理をしているようです。でもgcroot<clr-type^>を使えばオブジェクト単位にコントロール可能なので全然何でも思いの通りにプログラミングできます。

pori-
質問者

お礼

詳細な回答、本当にありがとうございました。 これで具体的に何をどうすればいいかが分かったと思います。 返事が遅れてすみませんでした。本当にどうもアリガトウございます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

C#とC++/CLIのリンクには詳しくないので参考意見ですが。 私の知る限り、 "C++/CLI"→"C#"はリンク可能です。 "C++"→"C++/CLI"もリンク可能ですので、 最悪 "C++"→"C++/CLI""→"C#" で呼び出せると思います。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.1

読み出すじゃなくてクラスを使う(呼び出す)の間違い? C#とのC++のリンクって事でしょうか? C++/CLIなら呼び出し可能だと思いますが、わざわざC++を使う意味がわかりません。C#で全部作成しても良いのでは?

pori-
質問者

補足

>>C#で全部作成しても良いのでは? と言うことですが。 C++で作成したカメラの動体検知プログラムと、C#で作成したメール送信プログラムをリンクさせたいのです。 状況の説明が不十分でした、申し訳ありません。

関連するQ&A