2011-06-18 8 views
3

dllを実行可能ファイルと同じディレクトリにコピーせずに登録不要のCOMオブジェクトを消費するにはどうすればよいですか?これは可能ですか?DLLを実行ファイルと同じディレクトリにコピーせずにCOMを登録しないでください

正確なシナリオのための完全な作業サンプルまたは詳細なステップバイステップガイドが必要です。

例えば、私は、次のコンポーネントがあります。
CppTestRunner.exe - VC++コンソールアプリケーション
CppTests.dll - VC++のMFC DLL
CsCOMServer.dll - C#COM見えるDLL

を私はしたくありません外部マニフェストの追加など、exeまたはそのディレクトリを変更します。
CppTests.dllはexeとは別のディレクトリにあります。
CsCOMServer.dllがCppTests.dllと同じディレクトリにある場合は問題ありません。

CppTestRunner.exeが正常に動作するCppTests.dllでLoadLibraryを呼び出します。

マニフェストを埋め込んだ後、Windows activation context apisを使用して、CppCOMServer.dllをexeディレクトリにコピーして、CppTests.dllが問題なくCsCOMServer.dllのインスタンスを作成できることを確認できましたが、やり直していますこの手順を回避します。私はCoCreateInstanceを呼び出すときにexeファイルのディレクトリに、私は次のエラーを取得していますCppTests.dllと同じディレクトリにCsCOMServer.dllと、そしてCsCOMServer.dllせずに現在

、:
エラー= 0x80070002がシステムを見つけることができません指定されたファイル。私はCppTestRunner.exeが中に見えるのパスを追跡するのSysinternalsのプロセスモニタを使用している

など
私は私がやろう事柄に応じて、時々CppTestRunner.exeがでCsCOMServer.dll.configを読み取ろうとすることに注意してくださいCppTests.dllと同じディレクトリですが、私がそこに入れようとしているにもかかわらず、私はエラーを越えることができませんでした。
また、私がしようとする他のことにもよるが、CppTestRunner.exeはCppTests.dllと同じディレクトリにあるCsCOMServer.dllを読み込もうとしますが、何らかの理由で同じエラーが発生します。

誰かがこの正確なシナリオで作業コードを知っていますか?

おそらく分かるように、これはユニット統合テストの一部です。

簡単な回避策として、私は現在、CppTestRunner.exeをCppTests.dllと同じディレクトリにコピーしてそこから実行していますが、この手順を避けたいと考えています。

ありがとうございます。

答えて

2

.NETは、管理対象の登録不要のCOMを最初にGACで検索し、次に実行可能ファイルのフォルダで検索します。アクティベーションコンテキストを使用してアクティベーションメタデータを読み込みますが、ファイル自体の場所は特定しません。

+0

ありがとうございます。これは不可能だと言っていますか? –

+0

これは不可能なので、あなたの回避策はまともなアプローチであるようです。 –

1

あなたは、サブフォルダにDLLを保存DLLFolder \ YourDll.dllとしましょう、とyourDllのマニフェストファイルで、

<file name = "DLLFolder\YourDll.dll"> 

のようにファイル名を書く。しかし、あなたがマニフェストを維持する必要がありますすることができますEXEが保存されている場所にある(DLLの)ファイル。

関連する問題