rand_s と RtlGenRandom
Visual Studio 2005から rand_sという関数が追加されました。
この関数の前のバージョン rand では、乱数シードを初期化しないと、毎回同じパターンの乱数が返ってくるので面倒だったのですが、 rand_sではその手間がなくなったので、使ってる方も多いのではないでしょうか。
ところが、この rand_s MSDNにもあるように、 XP以降の advapi32.dllにある function036 を使う、 RtlGenRandom という関数を使用するため、Windows 2000以前のOSではエラーになってしまいます。
私が、配布している KDWを使えば、 SystemFunction036を Windows 2000でも利用できるようになるので、問題ないわけですが。
結構はまることも多いようですね|・ω・)ノ
ちなみに、 KDW内の advapi32.dllを組み込んでソフトを配布しつつXPにも対応させたい場合の方法を紹介しましょう。
まず、適当なフォルダに、 advapi32.dllを 動的設定でインストールし、 advapixp.dll というファイルを生成させます。
あとは、 LoadLibraryで advapixp.dllを ロードして、 GetProcAddress で SystemFunction036 の関数エントリーを取得してやれば、RtlGenRandomとして、SystemFunction036 を使うことができるようになります。
関連サイト:
FFFTP 1.97 を Windows 2000で動かす - imatakeのメモ
新秀の介の日記(2010-01-11)
rand_s で大変だった - mocaskrの日記
Windows2000 と rand_s のお話
最近の VisualStudio には rand_s という便利な関数があります
Windows2000 と rand_s のお話
最近の VisualStudio には rand_s という便利な関数があります
Windows2000 と rand_s のお話
最近の VisualStudio には rand_s という便利な関数があります