問題タブ [activation-context-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - LoadLibraryEx は side-by-side マニフェストを無視します
LoadLibraryEx関数はサイド バイ サイド マニフェストを使用しますか? SxS マニフェストが埋め込まれた bar.dll があり、そのマニフェストにはこの bar.dll のバージョンが記述されています。他の dll ファイル foo.dll には、bar.dll を指定されたバージョンの依存関係としてリストするマニフェストがあります。しかし、foo.dll から bar.dll を読み込もうとすると、 (gflags で有効な sls を使用して) これらのマニフェストを無視し、定義して使用するとLoadLibraryEx("bar.dll", NULL, 0)、検索パスにある bar.dll の最初のバージョンを読み込むことがわかります。は適切なバージョンですが、これは の動作には影響しません。 は DLL の読み込みを遅らせるために暗黙的に使用されるため、適切なバージョンを読み込む必要があります。このように動作するはずですか、それとも私のプロジェクト構成に問題がありますか?ISOLATION_AWARE_ENABLEDLoadLibraryISOLATION_AWARE_ENABLEDLoadLibraryExLoadLibraryExLoadLibraryExLoadLibraryEx
foo dll
bar.dll
.net - Java アプリケーション内のアンマネージ ネイティブ C++ ライブラリから未登録の .NET アセンブリをロードする
ネイティブ コードを含む可能性のあるカスタム パッケージで拡張できる Java アプリケーションを使用しているため、拡張 jar を追加する以外に Java 環境を制御することはできません。
この例では、Java 拡張機能から C# コードを呼び出せるようにする必要があります。これは、以前に登録不要の COM を使用して純粋なネイティブ コンテキストから使用された C# コードであり、正常に動作します。今度は、この Java コンテキストから同じコードを使用できるようにする必要がありますが、DLL を見つける場所を制御する方法がないように思われるという問題が発生しました。DLL を JRE/JDK の bin ディレクトリにインストールすることを要求することは明らかにオプションではなく、DLL を GAC に登録することを要求することは理想的ではありません。
現時点では、すべての DLL 依存関係が拡張機能の jar にパッケージ化され、実行時に必要なときに読み込まれることを願っています (手動のインストール手順は必要ありません)。
アクティベーション コンテキスト API を使用してこれを機能させたいと考えており、 D : \somepath\の DLL を使用して、このコードのさまざまなバリエーションをテストしました。
マニフェストには、 CoCreateInstanceの呼び出しによって参照される C# クラスを含むアセンブリの詳細を含む、1 つのdependentAssembly が含まれています。
mt.exe を使用して DLL からダンプされたこの形式のマニフェストでも試してみました。
CreateActCtxとActivateActCtxの呼び出しは成功しますが、DLL をC:\Program Files\Java...に配置しない限り、 CoCreateInstance呼び出しは常に失敗し、0x80070002 が返されます。
完全に管理されていない C++ DLL を読み込み、任意の既知の場所にある DLL から C# クラスのインスタンスを作成できる (GAC を使用する以外の) 解決策はありますか?