7

私はC++アプリケーションを持っています。これは、ユーザーのC ++プラグインDLLをサポートし、これらのDLLを動的にロードしてから、ユーザーのタイプを動的に作成して使用できるようにします。これらのユーザータイプは、メインアプリケーションのコアライブラリで定義されている基本タイプとインターフェイスから派生しているため、ユーザーのオブジェクトを基本クラスへのポインターとして保持し、ユーザーの仮想関数を呼び出して魔法を実行します。

ここで、プラグインDLLを拡張して、マネージDLLを許可したいと思います(私は主にC#に関心があります)。同じ魔法をすべてC#プラグインDLLで発生させたいです。

これらのdllを動的にロードするにはどうすればよいですか。現在使用しているwin32のLoadLibraryは、マネージドDLLに満足するだろうと思います。コンパイル/リンク時にこれらのライブラリにアクセスすることはできません。これらはユーザーからのものです。

ライブラリをロードした後、残念ながら、派生関数を呼び出す方法として、将来的にCOMが疑われます。おそらく、私が読んでいるCLI / C ++ラッパーを使用することができますが、ここでは非常に経験が浅いので、適切な記事へのアドバイスやリンクをいただければ幸いです。

4

3 に答える 3

2

これを行う別の方法は、C#クラスをホストするC ++ / CLIプロジェクトを作成し、それをC++プロジェクトのブリッジとして使用することです。

このアプローチへのリンクがさらにいくつかあります。

最新のリンクには、ブリッジの簡単なソースコードがあります

于 2011-06-01T21:09:38.717 に答える
2

基本的に、プロセス内で CLR のインスタンスを起動します。CLRホスティングに関するこの記事をご覧ください

于 2011-06-01T20:48:25.707 に答える
0

私のソリューションを説明するスライドをいくつか示します。

https://docs.google.com/presentation/pub?id=1YoJRGnveh4By7ym4GL19L7OzYOFORZQB6RgJEPVfFb8&start=false&loop=false&delayms=3000

私の解決策は、純粋なマネージド C# コードにリンクする混合 C++/CLI dll にリンクする通常の手段 (LoadLibrary) で読み込まれる win32 プラグイン dll を持つことでした。私は、大量のボイラー プレートと、Padu によって提供されたリンクに基づく二重の c++/cli ブリッジ パターンを使用して、両方の方法で呼び出しを実行できるようにしました。詳細はかなり複雑でしたが、エンド API ユーザーの仕事は非常に簡単で、それが私の目標でした。マネージ プラグイン オブジェクト ライターは、単にオブジェクトから派生するだけで、すべてが機能します。

基本的に、「混合モードの疑似継承」を提供するパターンを作成しました。これで、私の c# オブジェクトは c++ の基底クラスから派生します。

于 2012-04-25T16:20:32.590 に答える