2010年7月 Archives

Windows2000 と rand_s のお話

| No Comments | No TrackBacks

最近の 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 でも同じだし。

VisualStudio2010 と Windows2000

| No Comments | No TrackBacks

VisualStudio2010 が出たので、開発用のコンパイラも入れ替えたのですよ。で、うきうきしながらコーディングしていたのですが、思わぬ落とし穴が。

VisualStudio2010 で作られた実行ファイルが Windows2000 で動作しない!

いや、もう、ね。DLL が足りないとか、エントリーポイントが足りないとか、関数がないとか、そういうレベルではなくて、Windows2000 で実行すると「有効な Win32 アプリケーションではありません」と言われてしまうのですよ。

もうおまえは何を言っているのかと(以下略)

これは正直困りました。いろいろと検索してみたら、ランタイムライブラリをリンクしない というページがあったりして、ん~strcpy(_s)じゃなくて、lstrcpyを使えばいいのかな~とか、そもそもstd::string使えよ!?ってことかな~とかいろいろと考えたのですが、結局 VisualStudio2008 もインストールして両方で作ることにしました。

それと、上記ページにあった subsystem バージョンを変更する方法は 5.0 に設定すれば DecodePointer がないよ。と言われたので、DecodePointer を乗っ取ればいけそうなのですが、そもそもこの関数が何をするのかわからなかったのでやめました。

そのうち時間を見つけて WindowsDriverKit の方を調べてみるかな。

踊る大捜査線 THE MOVIE 3

| No Comments | No TrackBacks

踊る大捜査線 THE MOVIE 3 を見てきました。

ちなみに見た映画館は何故か茨城県の水戸です。初日なので混んでいるかな~と思っていたら、普通に空いていました。ちょっとびっくり。

以下見た感想などを。一応ネタバレなので真っ黒にします。

ネタバレを見る

と、まぁ、全体的に及第点だけど、2 ほどではないかな?という感じです。まぁ、次があっても見に行くけどね!

関係ないけど、上映前の映画 CM でハリー・ポッターをやっていたけど、冒頭のハリーとヴォルデモートが対決するシーンって最後のシーンでは(^^ゞ