最近の VisualStudio には rand_s という便利な関数があります。主に乱数の初期値として使える関数で、よくある GetTickTime を使った時なんかよりかなり優秀な乱数の種を与えてくれます。
で、MSDN のページや黒翼猫さんのページに書いてあるようにこの関数、Windows 2000 では動きません。
というか、動かないどころか EXE を実行すると「有効な Win32 アプリケーションではありません」とか言われてしまうのです。
で、不思議なのがこの関数、MSDN のページにも書いてあるのですが内部でRtlGenRandomという関数を呼び出します。ところが、この関数の説明を読んでみると、最初に
[The RtlGenRandom function is available for use in the operating systems specified in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.]
とっても意訳
「RtlGenRandom 関数は OS によって使えなかったりするよ。代わりに CryptGenRandom 関数を使ってね!」
……ちょ、おまwwww自分で言っているんだから CryptGenRandom 関数を使えよ。てか、そのおかげで原因がわからず偉い苦労したんだぞwwww
と、ひとしきり頭を痛めた日でした。
な~んで RtlGenRandom で実装しているんだろうなぁ。VisualStudio2010 でも同じだし。
コメントを投稿する