2010-11-30 10 views
2

私はC++とC#でライブラリを使って何かを達成するための情報を探しています。中間のライブラリを作成するにはどうすればいいですか?

  • C#アプリケーション::私が知りたいのですがどのような は、次のような問題にアプローチする方法です
    が呼び出されたときに、create_button(x、y)と呼ばれる機能を-has:ウィンドウ
  • C++ライブラリは-has
    のc#アプリケーションのウィンドウにボタンが作成されます。 C++ライブラリへのリンク-dynamicalyとcreate_button() 関数を呼び出します:
  • C++アプリケーションを( C#アプリケーションが実行されていない場合は、
    何も起こりません)。

どのように私はこの問題に近づくでしょうか、あなたのアイデアを聞いてうれしいです。 プラットフォームはWindowsです。私の質問は、C++ライブラリとC#アプリケーションとの間で新しいボタンを作成するにはどうすればいいですか?それはリンクされていますか、ソケットです...私はGTK +をLinuxで特に考えていますが、あなたはgtk +ライブラリにリンクしていますが、ライブラリウィンドウはGNOMEとどうやって新しいウィンドウなどを作りますか?私はdllを書くことに興味がなく、それらをC#アプリケーションにリンクしています。私は中間のライブラリを作成することに興味があります。

+0

WindowsのフォームはC#が別のプロセスとして実行されるので、 – dexter

+0

C#アプリケーションはこれが起こることを知っていますか?これを助けるためにコードを入れることができますか、これを任意のC#アプリケーションに対して行うつもりですか? –

+0

@max:確かにC#アプリケーションは自分で管理しているアプリケーションです。 @Len:はい、私はC#アプリケーションを作成しているので、 –

答えて

2

私はあなたがしたいことを何の気のがたい方法で考えることはできません。あなたがしなければならないと思うのは、C#アプリケーションで描画を行い、ソケットなどのメッセージングインターフェイスを公開して、外部アプリがC#アプリに指示するメッセージを送信できるようにする機能を作成することです。 C#アプリケーションは、メッセージタイプDRAW_BUTTONのメッセージを受信すると、受信したメッセージに指定されたパラメータを使用してボタンを描画します。

+0

こんにちはフランク、確かに私はこれのようなスマイリングを行うことについて考えていた。メッセージングシステムをWindowsで利用することをお勧めしますか? –

0

C#が管理され、C++がネイティブなので、ここで問題に遭遇します。私が知る限り、CLIでネイティブコードを呼び出す唯一の方法は、P/Invokeレイヤを使用することです。この場合、DLLをインポートしたり、プロトタイプを書き込んだりする必要があります。

さらに私は、P/Invokeの呼び出しはC++ではなくCの関数であると信じていますが、Cライブラリを追加してC++ライブラリを呼び出して呼び出すことができます。

+0

確かに、私はCライブラリを公開することでこれを行いますが、問題はありません。しかし、これは私の問題がある場所ではなく、実際に私の単一インスタンスのC#アプリケーションと通信するC++アプリケーション用のライブラリを作成したいと考えています。今、下のfrankcで提案されているように、私はそのためにWindowsメッセージを使うべきだと思います。 –

+0

P/Invokeだけが利用可能なinteropではありません。 IJW(C++/CLI interop)があります。http://stackoverflow.com/questions/2211867/how-do-i-call-native-c-from-cをご覧ください。プロセス間通信では、名前付きパイプ、ソケット、COM、または共有メモリを使用できます。 –

0

C#で小さくても適切なHWNDを作成できる場合(ウィジェットが分からない場合)、これを使用してC#のウィンドウを親として使用してC++ウィンドウを作成できます。

私たちは、数年前にjava/C++プロセスの対でこれを正確に行いました。しかし、JavaアプリケーションはRPCを介してC++アプリケーションにHWND値を報告することができたので、セットアップが難しくありませんでした。

0

C#アプリケーションのコードを制御し、C++アプリケーションのコード、おそらくは「ライブラリ間」を制御するとします。私は自分自身に "なぜこれをやっているのですか?"と尋ねています。

C++アプリケーションでC#アプリケーションに特定のボタンを追加させ、そのボタンを押すとC++アプリケーションと通信できるようにしたい場合は、個人的には標準IPCを使用し、C++アプリケーションとC#アプリケーションの間に通信チャネルを持ち、C++アプリケーションにIPC経由でC#アプリケーションに尋ねて、ボタンを表示させてから、C#アプリケーションに詳細を送信させます同じIPCチャンネルを介してC++アプリケーションに送信します。

このルートがうまくいかない場合は、現時点で解決しようとしている問題を明確にする必要があると思います。あなたの現在の「解決策」が間違ったトラックにあると思います。現在の「解決策」は間違っているだろう。

+0

こんにちは、私の目標は次のとおりです:プログラマが特別なインターフェイスを利用するためのライブラリを提供したいと思っています。アプリケーションにipcを公開したくはありません。(セキュリティ上の理由以外ではありません。プログラマーに透明なレイヤー)。多くの大きな反応を読んだ後、私のアプローチは次のようになると思います:いくつかの関数を公開するCライブラリを作成し、ライブラリ自体がIPCをC#アプリケーションに渡します。使用するIPC方法についてのヒントはありますか?私はMemoryMappedファイルまたはソケットについて考えていました。あなたの答えをありがとう! –

+0

これはこれまでに行われていることですが... C#アプリケーションからCOMを介して必要な機能を単に公開してみませんか? –

関連する問題