問題タブ [delay-load]

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.

0 投票する
6 に答える
3019 参照

c++ - C++ での DLL の自動ロードを無効にする

私のシナリオは次のとおりです。私のアプリケーションは特定の DLL に依存しています (リンク中にその lib を使用します)。ただし、アプリケーションの実行時に、LoadLibrary を使用してその DLL を明示的にロードしたいと考えています。ただし、既定では、その DLL が必要なスコープにコードが到達すると、環境は自動的にそれを検索して読み込みます。私はこの動作を無効にしたいと考えており、アプリケーションがその DLL に属するコードを実行する必要があるポイントに達した場合は、自動的にロードするのではなくクラッシュすることを好みます (したがって、DLL はロードされるだけです)。明示的に LoadLibrary を呼び出したためです)。
その間、私は遅延ロード機能を使用しています (したがって、ロード トリガーは、DLL を実際にロードする必要がある場合にのみ発生します)。ただし、DLL がまだロードされていない場合は、アプリケーションがクラッシュすることを望みます。

おそらく、これを達成する方法に精通している人はいますか?

0 投票する
3 に答える
101250 参照

c# - カスタム パスを参照 DLL に設定しますか?

MainProj他のいくつかの DLL プロジェクトを参照する C# プロジェクト (と呼びます) があります。これらのプロジェクトをMainProjの参照に追加することにより、プロジェクトがビルドされ、結果の DLL が MainProj の作業ディレクトリにコピーされます。

私がやりたいのは、これらの参照される DLL をMainProj、作業ディレクトリ自体ではなく、 の作業ディレクトリ、つまり MainProj/bin/DLLs のサブディレクトリに配置することです。

私は経験豊富な C# プログラマーではありませんが、C++ の世界から来たので、1 つのアプローチは、プロジェクト参照を削除し、必要な DLL をパスとファイル名 (つまり、C++ でLoadLibrary) で明示的にロードすることだと思います。ただし、方法があれば、ある種の「参照バイナリパス」を設定することをお勧めします。これにより、ビルド時にすべてがこのサブディレクトリに自動コピーされます(その後、そこから参照されます)。私は明示的にそれぞれをロードする必要があります)。そのようなことは可能ですか?

そうでない場合、私が求めていることを達成するためにC#で推奨される方法は何ですか(つまり、Assembly.Load/ Assembly.LoadFile/を使用したもの、またはおそらくAssembly.LoadFrom? の何か)AppDomainSystem.Environment

0 投票する
4 に答える
2434 参照

c++ - DLL と関連する .lib ファイルの DelayLoading

アプリケーションで wintrust.dll と crypt32.dll の読み込みを遅らせようとしています (これらは DLL でデジタル署名/発行者チェックを実行するために使用されます)。私はVS2008を使用しています。これら 2 つの DLL をプロジェクト プロパティの [Linker] セクションの [Delay Load] プロパティにエントリとして追加した後も、DLL から何も読み込まれなかったという LNK4199 警告と、WinVerifyTrust などのシンボルを解決できない LNK2019 エラーが表示されます。

以下を追加の依存関係のエントリとして追加すると、この問題が軽減されます: crypt32.lib および wintrust.lib。リンクに問題はありません。しかし、私が疑問に思っているのは、これが静的ライブラリにリンクされていないことを確認するにはどうすればよいですか? ライセンスの問題が発生する可能性があるため、静的ライブラリにリンクしたくありません。Windows にインストールされている DLL を動的にロードしたいのですが、LoadLibrary および GetProcAddress 関数呼び出しに頼らずに、DelayLoad がこれを行うのに役立つことを期待していました。

すべての異なるライブラリの使用法/リンク オプションに関する情報をいただければ幸いです。

ありがとう。

0 投票する
1 に答える
1264 参照

nunit - NUnit での TestCaseSource の遅延読み込み

TestCaseSource 関数を使用する NUnit テストがいくつかあります。残念ながら、必要な TestCaseSource 関数は初期化に時間がかかります。これは、フォルダー ツリーを再帰的にスキャンして、テスト関数に渡されるすべてのテスト イメージを見つけるためです。(または、実行するたびにファイル リスト XML から読み込むこともできますが、新しいイメージ ファイルの自動検出は引き続き必要です。)

ユーザーがノードをクリックするか、テスト スイートが実行されるまで、NUnit がテスト ケースを列挙しない (TestCaseSource 関数を呼び出さない) ように、TestCaseSource と共に NUnit 属性を指定することは可能ですか?

テスト プロジェクトにアクセスできない他のユーザーは、テスト プロジェクトのソース コードを変更することなく、新しいテスト イメージをフォルダーに追加する必要があるため、フォルダーに格納されているすべてのテスト イメージを取得する必要があることはプロジェクトの要件です。その後、テスト結果を表示できます。

一部の独断的な単体テスト担当者は、私が NUnit を使用して本来すべきではないことを行っていると反論するかもしれません。要件を満たす必要があることは認めざるを得ません。NUnit は、私の要件のほとんどを満たす優れた GUI を備えた非常に優れたツールであるため、適切な単体テストであるかどうかは気にしません。

追加情報(NUnit のドキュメントから)

オブジェクト構築に関する注意

NUnit は、テストのロード時にテスト ケースを見つけ、非静的ソースを使用して各クラスのインスタンスを作成し、実行するテストのリストを作成します。各ソース オブジェクトは、この時点で一度だけ作成され、すべてのテストが読み込まれた後に破棄されます。

データ ソースがテスト フィクスチャ自体にある場合、TestFixtureAttribute で提供されるフィクスチャ パラメーターの適切なコンストラクター、またはパラメーターが指定されていない場合は既定のコンストラクターを使用して、オブジェクトが作成されます。このオブジェクトはテストが実行される前に破棄されるため、これら 2 つのフェーズ間 (または異なる実行間) での通信は、パラメーター自体を介する場合を除いて不可能です。

テスト ケースを事前にロードする目的は、TestCaseSource とテストの実行の間の通信 (または副作用) を回避することのようです。これは本当ですか?これが、テスト ケースを事前にロードする必要がある唯一の理由ですか?

ノート:

http://blog.sponholtz.com/2012/02/late-binded-parameterized-tests-in.htmlに記載されているように、NUnit の変更が必要でした。

このオプションを NUnit の新しいバージョンに導入する計画があります。

0 投票する
1 に答える
246 参照

dll - アンマネージ コードを使用して .net ランタイムの存在を確認する

私は、rundll32 で読み込むことができ、マネージ コードを実行する前に .Net ランタイム ライブラリの存在をチェックする混合マネージ/アンマネージ DLL を作成したいと考えています。

これを実現するために/DELAYLOAD、CLR (mscoree.dll など) を試して、SomeManagedCode() が呼び出されたときにのみ読み込まれるようにしました。ただし、CLR は RunDllEntryPoint() が呼び出される前でも読み込まれます (読み込まれたモジュールのリストに mscoree.dll が表示されます)。これは、コンパイラが _CorDllMain() を呼び出すコードにリンクしているためだと思います。これは、自分のエントリポイントが呼び出される前にランタイムを強制的にロードする必要があります。

これを再パッケージ化して機能させる方法があることは知っています。たとえば、マネージ コードを別の DLL に分割しますが、上記のコードを単一の DLL で機能させる方法があるかどうかに興味があります。

CLR dll を本当に遅延ロードすることは可能ですか?

0 投票する
0 に答える
241 参照

c++ - Win7 でコンパイルされた遅延ロードされた dll を XP にロードできない

VC++ 2010 を使用しています。A.dll は B.dll に依存しており、A のプロジェクト設定で B.dll を遅延ロードとして設定します。Win7 x64 ビット OS 上でビルドします。Win7 OS では B.dll をロードしても問題ありませんが、XP x64 OS では B.dll のロードに失敗します。遅延ロード設定を削除すると、B.dll は XP OS でもロードできます。dll が XP でビルドされている場合は、XP にロードできます。

Win7 でビルドされた遅延ロードされた dll が XP でロードできないのはなぜですか? どうすればそれを機能させることができますか?

0 投票する
2 に答える
9950 参照

c++ - ロード DLL の遅延: アプリケーションを複数回起動すると、「例外 0xC06D007E: モジュールが見つかりません」

Delay Load DLL を使用しているアプリケーションで断続的なクラッシュが発生する場合があります。クラッシュが見られたいくつかの異なるコール スタックがありますが、 でレイズすると常にクラッシュ0xC06D007E: Module not found__delayLoadHelper2ます。

プロセスを連続して (連続して) 複数回呼び出すと、例外が発生します。コール スタックの例を次に示します。

C++ アプリケーションは、Delay Load DLL を使用して .NET コードをロードしています。

クラッシュが発生するコンピュータは非常に強力なマシン (12 コア CPU、48 ギガ RAM) であり、影響があるかどうかはわかりません。しかし、クラッシュは常に発生するわけではないため、競合状態またはリソースの問題のように見えます。

このフォーラム スレッドは私のケースを説明していますが、解決策はありません。

なぜこれが起こっているのでしょうか?

0 投票する
2 に答える
694 参照

c++ - 遅延読み込みを使用して正しいライブラリを読み込みます - 戻り値の型エラー

ここで msdn ドキュメントを使用しました: http://msdn.microsoft.com/en-us/library/f0fkfy9y(v=vs.100).aspx

そこでは次のように指定されています。

だから私は次のことを試しました:

HMODULE を返すとエラーが発生します。

'return' : 'HMODULE' から 'FARPROC' に変換できません。

何が問題ですか?私は何か疲れていますか?彼らはあなた自身のHMODULEを返すと言います、そしてそれは私がしたことです...

0 投票する
1 に答える
4406 参照

visual-studio-2013 - 入力ファイル 'Delayimp.lib' を開けません

Visual Studio 2013 (OS: Windows 7) でプロジェクトをコンパイルしています。プロジェクトは、プラットフォーム ツールセット「Visual Studio 2008 (v90)」でコンパイルされます。オプションで、次のように遅延して読み込まれるように dll を設定しました。

/DELAYLOAD:"PluginPost.dll"

私が得ているエラーは次のとおりです。

1>リンク: 致命的なエラー LNK1181: 入力ファイル 'Delayimp.lib' を開けません

そして今、私の質問は次のとおりです。遅延した dll をロードするために Delayimp.lib が必要なのはわかっていますが、この Delayimp.lib はどこにありますか?

ヒントをお寄せいただきありがとうございます。

PS。64 ビット アプリケーションをコンパイルしています。

0 投票する
1 に答える
391 参照

c++ - crypto++ cryptopp.dll の遅延ロード

Crypto++ ライブラリは、cryptlib.libおよびに対してコンパイルすることにより、遅延バインディングをサポートしcryptopp.libます。これには、 を使用する必要がありますcryptopp.dll。これにより、この dll を遅延ロードしようとすると/DELAYLOAD:cryptopp.dll、必要なインポートのために遅延ロードできなかったというリンク エラーが発生します。

例として、次のコードを参照してください。

これにより、次のリンク エラーが発生します。

ロードの遅延にcryptopp.dll成功した人はいますか?