kkamegawa's weblog

Visual Studio,TFS,ALM,VSTS,DevOps関係のことについていろいろと書いていきます。Google Analyticsで解析を行っています

msvcrtをどのくらい使うか?

以前は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が二重定義になるよー」という悲鳴しか見つかりませんでした。