私はVisual Studio 2005 Academic Editionを使っているのですが、最近プロジェクトをリビルドしたときの動作がおかしいです。今まで正常に動いていたのに、いきなりMSVCP80D.DLLがありません、と言われて起動しなくなることがあります。
何回リビルドしても駄目なときは、プロジェクトを置いているディレクトリに生成される DebugやReleaseというディレクトリを丸ごと葬ると直るようです。実行ファイルが生成される方ではなく、オブジェクトファイルが生成される方のディレクトリです。
ビルド時のメッセージにも特に異常はないし…一体何なのかね??ネットワークドライブにファイルを置いているからいけないのでしょうか?
同じ症状が出ている人or解決策を知っている方はぜひ教えてください。
WindowsのDLLではエクスポートをフォワーディングするという芸当ができるそうです。この機能を使うと、別のDLLがエクスポートしている関数を借りてきて、自分がエクスポートする関数にすることができます。
実際の使用例としては、kernel32.dllのHeapAllocというAPIが、ntdll.dllのRtlAllocateHeapと言うAPIにフォワーディングされています。フォワーディングされた関数はロード時にアドレスが解決されるようで、特にオーバヘッドはありません。
DEFファイルで、
HeapAlloc = ntdll.RtlAllocateHeap
のように [DLL名.関数名] という形で書くと、フォワーディングできるようです。
Dependency Walkerで見ると、上図のrecvのようにちょっと違うアイコンで表示されます。
COFFって面白いことができるんですねえ。と、ここまで書いて、そんなの常識だろって、詳しい方々に突っ込まれる気がしてきた…。
< | 2007 | > | ||||
<< | < | 03 | > | >> | ||
日 | 月 | 火 | 水 | 木 | 金 | 土 |
- | - | - | - | 1 | 2 | 3 |
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
合計:
本日: