2017-01-31 5 views
-1

これは複雑な状況です。 exeの読み込みは、プログラムまたはdllコードが実行される前に約10分遅れます。プログラムとdllはともに社内で書かれています。以前のバージョンのdllを使用すると、問題が緩和されるようです。私が決定しようとしているのは、プログラムにdllを添付するためにコンパイラが生成したコードで何が起こり、そのプログラムをロードするのに数分かかることがあります。プログラムとDLLはVC++ 6.0を使用して作成されています。これは約1年前のdllリビジョンの後に起こりましたが、リビジョンはdll初期化/スタートアップコードとは関係ありませんでした。これはすべてのコンピュータで発生するわけでも、特定のコンピュータでDLLを使用するすべてのプログラムに影響するものでもありません。失敗のパターンはないようです。プログラムコードが実行される前に、静的な.libを介してDLLにリンクされているプログラムではどうなりますか?

+0

アプリケーションやDLLは起動時に多くのことを行うことができます。 'DllInitialize()'またはグローバル/静的オブジェクトのコンストラクタでそれらをチェックしてください。 'main()'(あるいは 'WinMain'の始めに' MessageBox() ')の先頭にいくつかのロギングを入れて、メインがいつ実際に起動したかを見ることができます。 – axalis

+0

その10分間(dllコードが呼び出されたとき)に何が起こるのですか?アプリはフリーズしていますか?それとも別のことをやっているの?それをどのようにテストしましたか( 'DllMain'にいくつかのコードを追加しました)? DLLはアプリケーションにリンクされていますか(DLLが存在しない場合、アプリケーションは起動しません)、またはLoadLibrary経由でロードされているか、遅延ロードされています(https://msdn.microsoft.com/en- us/library/151kt790(v = vs.71).aspx)? – CristiFati

+1

タイトルはかなり混乱しています。 _static_ .libは、** DLLに**リンクしていないことを意味します。 DLLを使用する場合は、_import_ .libを使用します。 – MSalters

答えて

0

"プログラムにdllを添付するためにコンパイラが生成したコードはどうなりますか?"

ほとんど何もありません。コンパイラが生成したコードはEXEではなく、DLL内に存在します。 C++ランタイムがロードされていることを確認し、グローバルオブジェクトのコンストラクタを呼び出し、DllMainを呼び出すという3つの重要なタスクがあります。生成されたコードの最後の2つの部分はコードを呼び出すだけです。生成されたコード自体はナノ秒で実行されます。

関連する問題