3

この方法は狂気です、私は知っています。

.NET 経由で拡張したい実行可能ファイル (アクセスできないソース コード) があります。これはネイティブの実行可能ファイルであるため、これを行うには CLR ホストを挿入する必要があります。私の基本的な考えは、.NET 言語 (C# など) を介してスクリプトのような機能を提供し、スクリプトが操作するターゲット実行可能ファイルにフックを提供することです。逆もまた同様です。

これを達成するには、DLL インジェクション、ランタイム ASM インジェクションなど、さまざまな手法を使用する必要があることはわかっていますが、知りたいのは次のことです。私が話していることは可能ですか? さらに良いことに、以前にこのようなことをした人はいますか?

4

2 に答える 2

2

ネイティブ実行可能ファイルが COM オブジェクトを使用できる場合は、COM 相互運用機能を使用してこれを行うことができます。相互運用のために .NET アセンブリを登録すると、ネイティブ実行可能ファイルは、「通常の」COM オブジェクトと同じように .NET クラスを使用できます。最初のオブジェクトが作成されると、ネイティブ プロセス内で CLR がスピンアップします。同様に、ネイティブ実行可能ファイルから COM オブジェクトを公開できれば、相互運用機能アセンブリを作成すれば (IDispatch のみを使用する場合はタイプ ライブラリがなくても)、.NET コードからそれらを使用できます。

基本は簡単ですが、私は表面をなぞっただけです。このような本格的なプロジェクトには、本格的なリファレンスが必要です。Adam Nathan による完全な相互運用性ガイドである .NET と COMを強くお勧めします。これは大きな本であり、多くのことを言い尽くすことはありません。また、.NET クラスと COM クラスをきれいに相互運用するように設計するための優れた情報も多数含まれています。また、ネイティブ アプリ内で CLR を直接ホストする方法についても説明しますが、そのオプションはソース コードにアクセスしないと実用的ではない場合があります。私は間違いなく COM 相互運用ルートから始めて、他に選択肢がない場合にのみ CLR をネイティブにホストします。

于 2009-04-24T21:52:43.823 に答える
1

実際、自動化フレームワークに対して非常によく似たことを行います。CodePlexのEasyHookプロジェクトを参照してください。クロスプロセス通信用の組み込み IPC Communicator など、優れた機能がたくさんあります。ちょっとした作業が必要でしたが、探していることを正確に行う必要があります。

于 2011-03-09T15:39:09.787 に答える