• 締切済み

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

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

  • pori-
  • お礼率40% (2/5)

みんなの回答

回答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

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

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

  • C#の万年カレンダーのプログラム教えてください

    どなたか申し訳ありませんが、初心者が書けるようにC#での万年カレンダーのプログラムを最初から最後まで教えていただけませんか?よろしくお願いします

  • C# プログラム(初心者)

    C# プログラム(初心者) /// <summary>ステータスバーに表示する文字を取得または設定します。</summary> [System.ComponentModel.DefaultValue(null)] [System.ComponentModel.Description("ステータスバーに表示する文字を取得または設定します。")] public string StatusText { get; set; } くだらない質問で申し訳ないのですが上記のプログラムで[System.ComponentModel.DefaultValue(null)]などの[]は何を表しているのでしょうか? ○○について調べてこい!などでもいいので お願いします。調べ方もわからず困ってます

  • C言語でのプログラムの作り方

    はじめまして。C言語初心者の中学一年生です。 C言語でプログラムを作ろうと思ったのですが、やり方がわかりません。 ”hello”と表示するプログラムの作り方を教えてください。 使用しているコンパイラは"Visual C++ 2010"です。パソコンはWindows xpです。 中学生でも分かるように教えてください。 エディエタ、やソースプログラムなどの用語についても教えてくださると嬉しいです。

  • C++プログラムをCで呼び出したい

    こんにちは。質問させていただきます。 現在、Linux/GCC3.2.3系でC言語の開発をしています。 私自身のレベルとしては、C言語での実務は1年未満。C++はゼロ。本業はJavaプログラマを数年やっております。 さっそく本題です。 既にC++で作成されたある一連のプログラム群(20本程度)があり、これらC++の関数をC言語で作成されたプログラムから呼び出して使用したいと思っています。 C++プログラムは既にテスト済みなので、これらのソースは基本的には手を加えず、そのままライブラリ化などして使用したいと考えています。 そこで質問なのですが、C言語から呼び出せるような形式でC++ソースをライブラリ化する方法と、C言語からの呼び出し方を教えていただけないでしょうか?

  • ubuntuでC++のGUIプログラム

    C++でゲームを作りたいと思っているのですが、C言語はあるていどは分かるのですがC++はまったくやったことがありません。 そこで質問ですが、「ubuntuでC++のGUIプログラム」は作れるのでしょうか? WindowsとLinux系OS(Ubuntu)の両方で開発できるのが理想です。 初心者なので質問が上手くありませんが、答えていただければ幸です。

  • あるプログラム上で違うプログラムを呼び出す方法

    PHP初心者です。 大学で課題が出されて、どうしても分からないので質問させてください。 課題の内容は 「どのページからアクセスされているのか、GETパラメータで送信しラッパーを使用して、判断せよ」 というものです。(細かい表現は違っているかもしれません) 具体的には、A、Bという二つのPHPプログラムを インターネット上で動かした時、 ブラウザに、 (Aを呼び出したときは)「Aからアクセスしています」 と表示させるようにしたいというものです。 この時、ページ遷移はすることなく、AからGETパラメータpage=aを Cというプログラム(ラッパー)に送り、Cの中で、if文で判断し Aに表示させるようにしたいです。 作成するPHPプログラムは、A、B、Cの三つで、AとBの内容は 送信するパラメータが異なるだけでほぼ一緒なので、実質2つです。 execで、コマンドラインを使う方法ではなく、 URL?page=aを使うみたいなのですが、いろいろ試してみましたがうまくいきません。 分かりにくい表現で申し訳ないですが、 どうぞよろしくお願いいたします。

    • 締切済み
    • PHP
  • Cドライブ内のプログラムについて

    再び質問させていただきます。パソコン初心者です。 現在、富士通FMVLX70X/DのPCを使用しています。 Cドライブのプログラムファイル中にある、プログラムや アプリケーションソフトなどで削除していい物と、削除して はいけない物の区別がお解かりになる方教えて下さい。 宜しくお願い致します。

  • C#でのプログラム方法

    C#(コンソールでの実行ファイル)でのバッチファイル実行方法に悩んでいます。 実行イメージとして **************************************** 1. C#(A.exe)をダブルクリックで起動する 2. C#プログラム[A]はバッチファイルを起動する 3. C#(B.exe)をダブルクリックで起動する 4. C#プログラム[B]は2で起動したバッチファイルを終了させる(=DOS窓をCloseさせる?) **************************************** を考えています。 1~2の処理はなんとなくわかったのですが 4にてバッチファイルが起動しているDOS窓をどうCloseさせたらいいのかわかりません。 助けてください。

  • c#でのプログラムについて

    c#でのプログラムについて お世話になります。 c#初心者です。今までエクセルVBAでの簡単なプログラム経験があります。 コードファイル(CodeFile1.cs)からフォーム(Form1)を表示させるプログラム(初歩) ですでにいきづまっています。 ネットで見つけた、 「Form1 Form = new Form1();  Form.Show();」 と記述しましたら、下にあるエラー一覧で 「型または名前空間名'Form1が見つかりませんでした。usingディレクティブまたはアセンブリ  参照が不足しています。」と出ています。 なので、コードファイル(CodeFile1.cs)の上の方に 「using System.Windows.Form;」 と追加したのですが、まだエラー内容に変わりはありませんでした。 どうすればフォーム(Form1)を表示させるプログラムが出来るか どなたか、お教え頂きたく宜しくお願い致します。