こういう情報もあったんですね!下記のように整理してみました。
・msvcrt.dll … MS製Cランタイムライブラリ(システムDLL)
・msvcrt40.dll … VC6.0用Cランタイムライブラリ
・msvcr71.dll … VC.NET用Cランタイムライブラリ
・msvcp71.dll … VC.NET用C++ランタイムライブラリ
バージョン差異に関しては、Cランタイムリソースを相互で扱う場合に不具合が生じる可能性があるようです。たとえば、strstr関数のような、単なるポインタやバッファをやり取りする関数は良いのですが、ファイル操作の関数やスレッド生成の関数なんかは、各DLL間で汎用性が低そうです。
同一EXE内でこれらのCRT DLLを扱う場合は良いのですが、何らかの外部DLLと自作EXEを組み合わせて活用する場合に問題が生じそうです…。
一番良いのは、ABライブラリでCRTの内容をリバースエンジニアリングしてしまうことなのですが、、、これはこれで労力がかかります。
結局、私の意見をまとめますと、下記のようになります。
バージョン差異による問題がおきそうにない関数をリストアップし、それらをインストール率が一番高そうなmsvcrt.dllからリンクしてしまい、その他に関しては、独自のライブラリでカバーする。
いかがでしょうか?