0

ネイティブの.exeファイルとは異なるフォルダーからマネージドclrホスティングシナリオでAppDomainManagerアセンブリをロードする方法を理解しようとしています。

誰かがIHostAssemblyStore::ProvideAssembly実装を実行しましたか?これは、フォルダーからAppDomainManagerアセンブリをロードし、それを共有したいと思いますか?

私はこのWinApi/OLE /その他のプログラミングに不慣れであり、C++でディスク上のファイルからIStream*を取得する方法がわかりません。

または、任意のフォルダからDefaultDomainのAppDomainManagerをロードする別の方法はありますか?

4

1 に答える 1

0

SHCreateStreamOnFileは、アセンブリをディスクからIStreamにロードします。例:

HRESULT hr = SHCreateStreamOnFile(assemblyPath, STGM_READWRITE, ppStmAssemblyImage);

落とし穴:

CLRは、1つのアセンブリに対してProvideAssembly実装を数回呼び出します。

プロセッサアーキテクチャを考慮して、AssemblyBindInfoのpostPolicyIdentityを使用して、適切な呼び出しで「適切な」ビットを返すようにしてください。

アセンブリがビルドさ"Any CPU"れたが、postPolicyIdentityに含まれている場合、たとえば"processorarchitecture=amd64"最後にアセンブリを返すと、runtimeHost->Start()呼び出しは失敗します。

COR_E_FILENOTFOUND (0x80070002)代わりに、processorarchitectureが一致するまで戻る必要があります。

于 2012-06-05T16:15:27.473 に答える