予備:呼び出し元は、「プラグイン」アーキテクチャのタイプを公開するネイティブEXEです。 DLLをロードするように設計されています(名前で、コマンドライン引数として指定されています)。そのDLLはネイティブで、特定の関数シグネチャをエクスポートする必要があります。 EXEはC++で、EXEがブラックボックス(変更/再コンパイルできないため)であまり重要ではありません。ネイティブDLLは、前記DLLにおいてネイティブにソリューションを完全に実装することによって、アプリケーションのニーズを満たすことができる。ただし、C#でコード化するためには、実際の作業(ネイティブDLLをシンラッパー/ゲートウェイに変換する)を許可する必要があります。これは、(より存在する場合、共有してください)3つのオプションに私をリード:管理されていない管理オプション:パフォーマンスに関する考慮事項
- ネイティブDLLが内部
- ネイティブDLLは、C#のCOMオブジェクトと対話するC#クラスライブラリを使用するC++/CLIのDLLをロードしますCCW経由
- ネイティブDLLは、C#アセンブリへの呼び出しをCLRをホストとなり
もう一つの要件は、ネイティブのDLLをC#のメッセージ(通話機能)を送信するための方法を必要としますが、C#のニーズだけでなく、ということです特別な事態が発生したときにネイティブDLLへのイベント/コールバックを起動できるようにする(oシャットダウンして戻ってくる)。今この最後のことは、私は第3のオプションで対処する方法がわかりませんが、それはまったく別の質問です。
したがって、ポイント:パフォーマンス。これらのアプローチに関する情報(すべてが要件を満たしていると仮定)私の調査から、私の理解は2が1より多くのオーバーヘッドを持つことになりますが、私は100%自信を持っていないので、私はここにいるのです。 3については、まだ情報がありません。だから、
誰がこれらに対処(または別のエレガントなオプションを知っている)している場合、チャイムください。
感謝を!
パフォーマンスについてはわかりませんが、1が間違いなく最も簡単です。パフォーマンスの影響はおそらく、マーシャリングする必要のあるデータ量に依存します。 EXE <--> DLLから移動する必要のあるデータ量に関する情報はありますか? – Steven
通信は、主にNativeからManagedに頻繁に小さなパケット(256バイト+または - )の形で行われます。 ManagedからNativeへの通信はまれで、非常に短いパケットで行われます。 –