msvcr90.dll

C#で作ったDLLからC++/CLIで作ったDLLを呼び出すと、FileNotFoundExceptionが発生して、このところ途方にくれていました。


FileNotFoundExceptionというと、読み込むテキストファイルや画像ファイル等がないときに発生するというイメージでしたが、これはDLLが無いときにも発生するようです。正確に言えば依存関係にあるDLLの読み込みができないときにも発生するようです。

依存関係のチェックにはDependency Walkerなどのツールが便利です。ネイティブのDLLだけではなく、.NET Frameworkで作ったDLLについても確認できます。
http://www.dependencywalker.com/


で、結論としてはVisual C++のRedistributable Package関係でした。msvcr90.dllが無いという事が原因のようです。
http://www.microsoft.com/downloads/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=en
ただ、これを入れたからといって必ずしもすぐ動くわけではないというのが難しいところで・・・。入れた後もしばらく格闘していたらいつの間にか動いていて結局いまいちよくわからずじまいだったりします。


以下、参考になったサイトを列挙させて頂きます。
http://d.hatena.ne.jp/haru-s/20080831/1220175729http://d.hatena.ne.jp/haru-s/20080831/1220199143http://koha92715.blogspot.com/2009/01/cclidll.htmlhttp://d.hatena.ne.jp/KrdLab/20070224/1172256647http://msdn.microsoft.com/ja-jp/library/abx4dbyh(VS.80).aspxhttp://msdn.microsoft.com/ja-jp/library/2kzt1wy3(VS.80).aspxhttp://msdn.microsoft.com/ja-jp/library/ffkc918h(VS.80).aspxhttp://www.eml.ele.cst.nihon-u.ac.jp/~momma/wiki/wiki.cgi/OpenCV/0%20%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB%E3%82%84%E3%82%8B%E3%81%93%E3%81%A8.html#h11