前回に引き続きSide-by-Side話で、DLL+exe構成でのお話です。
実はexeと同様にDLLも対処することが出来ます。
exe名.manifestはexeに作用する物でDLLに対して作用させることができません。またWindowsServer2003以降、マニフェストの優先順位がXPのものと逆になったため、外部マニフェストで上書きができません。
XPのころであれば、DLL名+.2.config というファイル名でDLLのマニフェストも置き換えられたのですが・・・。コレに関しては昔に自分で書いた記事がこちらに。
よって解決策はほぼ1つで、DLLの中に入っている埋め込みマニフェストを開発環境にあわせたVCランタイムバージョンを使用するように変更するということになります。
これには方法が2つあると思います。
- mt.exeを使用し、DLLの埋め込みマニフェストを編集&書き戻す
- DLLをビルドする際に、 _BIND_TO_CURRENT_VCLIBS_VERSION を定義しておく
ほぼexeのときの手順と同じですね。
重要なのは、exeが求めるバージョンとDLLが求めるバージョンを一緒にしておくことです。
VC9で同一バージョンを指すように、VC8で同一バージョンを指すようにという感じです。同じVCxxで別々のバージョンを指してはいけません。実際にコレが起こると非常にわかりづらいエラーとして表面化します。。。
今までの全3回をきちんと理解すれば、おそらく目的の挙動を達成できるのではないかと思います。環境に合わせて、それぞれでやる内容は異なってくるかと思いますが、仕組みとツールの挙動が把握できれば思い通りに出来るようになるかと思います。