[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:4657] HMONITOR_DECLARED



藤井です。

From: MIYOSHI Masanori <miyoshi@xxxxxxxxxxxxxxxx>
Subject: Re: [MD:4657] HMONITOR_DECLARED
Date: Wed, 15 Oct 2003 19:16:36 +0900
Message-ID: <uismqajqz.wl%miyoshi@xxxxxxxxxxxxxxxx>

> >>>>> [meadow-develop : No.4657] にて
> >>>>> ": 後" = Shun-ichi GOTO <gotoh@xxxxxxxxxxx> さんは書きました:
> 後> mw32fns.c で、マルチモニタのAPIを使うためのHMONITOR のハンドル定義を
> 後> している部分でコケます。
> 
> 後> 原因は、vc6, vc7 ともに今時の環境で普通にコンパイルすると
> 後> DECLARE_HANDLE(HMONITOR) はwindef.h で行なわれ、かつ、HMONITOR_DECLARED 
> 後> は undefined な状態となるためです。
> 後> ## xxx_DECLARED は統一的に使われているようではなさそうです。
> 
> 
> 後> 古いシステム(Win95, NT4, etc.)で、古いコンパイラ(ちうかSDK)でビルドする
> 後> のでない限りmw32fns.c でのHMONITOR の定義は不要であり、適切なインクルード
> 後> ファイルを読み込んでいれば良いと思うので、削除しときました。
> 
> むむむ。私の環境(VC6 + 最新のSP)ではこの定義がないとコンパイルエ
> ラーになっちゃいます。T_T
> 
> 何か環境変数の定義が必要なのかしら?
> 
> #if(WINVER >= 0x0500)
> 
> が真になるようにすれば、winuser.h でこれらの定義が有効になるよう
> なのですけどね。
> 
> WINVER の意味って何でしたっけ?

バージョンアップで追加された OS の機能に関連した定義、宣言を有効にする
ためのフラグです。特定バージョン以降で追加された機能を使うアプリをビル
ドする時に設定します。

16bit 値かどうかは分かりませんが、上位 8bit が Windows のメジャーバー
ジョン、下位 8bit がマイナーバージョンに対応しているようです。

このマクロにバージョン番号を設定しておくと、そのバージョン以降に搭載さ
れている機能に関連した定義、宣言が有効になる訳です。(一覧は MSDN に載っ
ています)

WINVER == 0x0500 を設定した場合は、Win98, Win2K 以降で動作するプログラ
ムをビルドするということになります。

同様のマクロに、_WIN32_WINDOWS, _WIN32_WINNT, _WIN32_IE というものがあ
ります。

で、これらのマクロを指定しなければ全ての Windows で動作する(であろう)
プログラムがビルドできます。

VC 7.1 (確認できないですが VC 7.0 も恐らくそう) では、デフォルトで 
WINVER = 0x0500 が設定されるので、何もしなくても Win98 以降に追加され
たマルチモニタ API に関連した定義がヘッダで行なわれるようになります。

--
藤井 正行 / Masayuki FUJII ( boochang@xxxxxxxxxxxx )