2012-02-08 29 views
4

私は64bit DLLが32bit DLLにリンクできないと確信していました。32ビットと64ビットのDLLはどのように同じC: system32 kernel32.DLLにリンクしますか?

+1

IIRCこれは、Windowsが新しいバージョンで行う仮想マッピングshenanigansと関係があります。 1つのDLLパスは、誰が要求しているかに応じて数十種類の異なるバージョンになることがあります。 –

+1

DLLはkernel32.libにリンクされており、kernel32.dllにはリンクされていません。実行時に読み込まれる実際のDLLは、別の話です、Sophiaによって言われました。 –

答えて

6

Wow64にはファイルリダイレクタがあります。それは同じ名前のdllを持っていますが、適切な場所に格納されています。概念は次のところで説明されていますhttp://msdn.microsoft.com/en-us/library/aa384187(v=vs.85).aspx

%windir%\ System32ディレクトリは64ビットアプリケーション用に予約されています。ほとんどのDLLファイル名は、64ビットバージョンのDLLが作成されたときに変更されていないため、DLLの32ビットバージョンは別のディレクトリに格納されます。 WOW64は、ファイルシステムリダイレクタを使用してこの違いを隠します。

ほとんどの場合、32ビットアプリケーションが%windir%\ System32にアクセスしようとすると、アクセスは%windir%\ SysWOW64にリダイレクトされます。 %windir%\ lastgood \ system32へのアクセスは%windir%\ lastgood \ SysWOW64にリダイレクトされます。 %windir%\ regedit.exeへのアクセスは%windir%\ SysWOW64 \ regedit.exeにリダイレクトされます。

関連する問題