職場で起こったことです。
私たちはVisual Studio 2005を使ってExcelのアドインを開発しています。
今回の作業は32bitプロセスで動いているアドインを64bitプロセスに移植する作業でした。
このアドインは他社が作成したDLLをロードしていることが分かっていましたので、その会社に64bitプロセス用のDLLを作成したいただくように依頼しました。これは64bitプロセスから32bitプロセス用のDLLはロードできないと知ったからです。(kernel32.dllはロードできるみたいですが、なぜなんでしょうか?本当はロードできていない?)
しばらくして、64bitプロセス用のDLLが届き、LoadLibrary関数でこのDLLをロードしてみると戻り値が0となり、DLLのロードに失敗してしまいました。下記では、このロード対象DLLをHoo.dllとします。
Visual Studio 2005の出力をみると、ExcelのアドインからHoo.dllをロードしているのですが、すぐにアンロードするのです。そして、LoadLibrary関数の戻り値は0です。
このDLLだけをロードするプロジェクトを作成してみて、ようやく原因がわかりました。mfc110.dllが見つからないという旨のエラーメッセージが表示されたからです。
こいつを調べると、Visual Studio 2012のDLLらしいのです。つまり、Hoo.dllの開発環境にあったDLLが実行環境になかったため、ロードに失敗していたのです。
Visual Studio 2012 更新プログラム 3 の Visual C++ 再頒布可能パッケージをダウンロードして、インストールするとロードに成功しました。
以上です。