この前は、ExExなんてぶっ飛んだ名前の紹介でしたが、今日はそういう新しいものが出たときにどういう命名がなされるかというのを取り上げてみたいと思います。

まずは後ろにExを付ける方式です。CreateWindowEx, GetFileSizeEx, DrawTextEx, OSVERSIONINFOEX, IDispatchExなど最も数が多い印象です。これが普通です。そうでない奴は全部例外ですと言っても過言ではありません。基本すぎて特に言うことはありません。ExExはもう取り上げましたし。

後ろの反対は前ということで、ExtTextOut, ExtSelectClipRgnなど前に Ext を付ける派もいます。Why are some GDI functions named ExtXxx instead of XxxEx? – The Old New Thingによれば、これらが作られた当時、後ろにExを付ける命名習慣がまだ無かったとのことで、つまり古参なんですね。

また、後ろにEx以外を付ける例も結構あります。ようするにそれ以外ごちゃごちゃの筆頭です。GetTextExtentPoint32など32ビット化したんだねというもの、GetWindowWord → GetWindowLong → GetWindowLongPtrとデータ型を表すもの、GetTextExtentPointIのように少しは意味を考えたらしいものなど色々です。TxF (Transactional NTFS)対応用にTransacted系関数の大量導入(CreateFileTransacted, CopyFileTransacted, etc…)などは数が多いので圧巻です。

中でも特にCOM/シェル周りだと数字を付けるというのが特徴的です。IWebBrowser2なんかはよく使われるほうでしょう。たった今、探した中ではIBrowserService4が一番大きい値でした。シェルではありませんが、IDirect3DDevice7 → IDirect3DDevice8 → IDirect3DDevice9 → IDirect3DDevice9Ex / IDirect3DDevice10という例もあります。これはDirectXのバージョンです。

あと、WOWやWOW64(それぞれ16-32, 32-64 bit ブリッジ)もさすがマイナーどころ、独自形式ばかりです。LoadLibraryEx32W, WOWGlobalAlloc16、Global32Alloc(これはWOWではないですが), WOWShellExecute, Wow64GetThreadContextなどという具合です。純粋に拡張といえるかどうかは微妙な気もしますが、基となる関数があってそれに対する変種であるというのはどれも共通です。

あと目立つのは、ソケットでしょうか。send → WSASendなどWSA, WSAAsyncを前置する方式です。

当然、ここまで含まれない GetTextExtentPoint → GetTextExtentExPoint や GetTextExtentExPointI のような例外も多々あるわけです。網羅しきれません。


ようするにWindows APIはごちゃごちゃしているね、という話でした。

MacやPosixなどよそだとこういう話は全くと言って聞かないです。古いのは思い切って捨てるか、新しいのが出てこない(出す必要がない)といったところなんでしょうか。一体どうやっているのか不思議です。


スポンサード リンク

この記事のカテゴリ

  • ⇒ Exがついても大して変わった気がしないんだけど
  • ⇒ Exがついても大して変わった気がしないんだけど