以前はShell Lightweight Functionの便利関数とかなかったので、自分たちでいろいろ作っていたと思います。文字操作系などはstrtokとかでいろいろやっていた人も多いでしょうし、strlenとかいまだに使っているコードよく見かけます。
最近はまずShell Lightweight Functionにあるかなーと探してから、作るようにしているので、msvcrtのお世話になることもだいぶ減りました。ふと気になったので、Windows自身はどのくらい使っているのだろうと調べてみました。
今回のお題はmlang.dll。特に意味はありません。たまたま私が作ったDLLから間接的にこのmlang.dll経由でmsvcrt.dllを呼び出していたからです。mlang.dllで使っているmsvcrt内の関数の変遷を見てみます。あ、調べるのはVisual Studio付属のdumpbinコマンドでやってます。
c:\>dumpbin /imports c:\windows\system32\mlang.dll
まずWindows 2000 SP4 Rollup1付属のもの。
_adjust_fdiv
_initterm
_ultoa
_except_handler3
atoi
free
malloc
memmove
strchr
strncmp
strncpy
strrchr
strstr
wcschr
wcsstr
wcsncpy
wcscpy
次に、Windows XP SP3
_adjust_fdiv
_initterm
_ultoa
_vsnprintf
_except_handler3
atoi
free
malloc
memmove
strchr
strncpy
strncmp
strrchr
strstr
wcschr
wcsstr
wcsncpy,wcscpy,strncmpがなくなって、_vsnprintfが増えてます。次はWindows 7 x64(64bitのmlang.dllです)。ちょっと条件違いますが、すぐに用意できなかったので。
__C_specific_handler
_amsg_exit
_errno
_initterm
_XcptFilter
_vsnprintf
atoi
free
malloc
memcmp
memcpy
memmove
memset
strchr
strncmp
strrchr
strstr
wcschr
wcsstr
strncpyが消えてますが、memcmp,memcpy.memsetとか増えてますね。この辺はx64だからってこともないのでしょうけど、中身も歴代のOSでちょいちょい変わってそうな印象を受けます。やはりx86版を用意します…。
_XcptFilterってなんだろうと思って検索してみたのですが、「生成すると_XcptFilterが二重定義になるよー」という悲鳴しか見つかりませんでした。