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

[MD:7296] WINVER は明示的に定義すべき?



>>>>> [meadow-develop : No.7295] にて
>>>>> 藤井さんは書きました:
> > >   WINVER は最新ではない OS でもビルドできるバイナリを作成するために、新
> > >   しい定数定義や関数宣言などを抑制するためのマクロであって、SDK で目的
> > >   の定数や関数が定義されているかどうかを判定するために使うべきではない
> > >   と思います。
> > 
> > “WINVER を使うべきでない”が真であるとして、良い代案はあるでしょ
> > うか?
> > 
> > 本来であれば、configure で、構造体や関数の有無をチェックすべきな
> > んでしょうけど、ちょっと面倒ですよね。

> configure より手軽な代案は今のところ思いついていません。

;; 試しに configure スクリプトを書いてみて、気になる点がありました
;; ので確認

WINVER を Meadow 側で明示的に定義すべきでしょうか?
[meadow-develop: 4657] でも議論されたのですが、はっきりしないまま
で終わったので再度議論しましょう。

WINVER に対する私の理解は以下の通りです。

(1) WINVER は、作成しようとしている実行形式が実行可能なプラットフォー
    ム(OS)を決定する。
(2) コンパイル環境によって WINVER のデフォルト値は異なる。実行環境に
    は関係ない。

以下、これが正しいとして話を進めます。

現状では、WINVER の値は、Meadow 側で明示的に指定しておらず、コンパ
イル環境依存になっています。

このままで良いのでしょうか?

(1)を考えると、WINVER に 0x0400(Windows95) を明示的に指定すべきか
なと思います。Meadow は Window95 以降をサポートすることになってい
るからです。

一方で、実行時だけを考えると、WINVER 値はどうでも良いのかなとも思
います。使えるかどうか分からない API については、実行時に利用可能
かチェックして使う戦略を Meadow でとっているからです。

であれば、コンパイル時の都合だけで、WINVER を決定しても良いと思い
ます。

この場合も、WINVER に 0x0400(Windows95) を明示的に指定するのが良い
かな?  OSのバージョンチェック(#ifdef〜#endif)の多くが不要になって
ソースがシンプルになるし、古い開発環境でもビルド可能になるし。


これとは別に、Windows95, NT をまだサポートするのかという議論もあり
ます。これらを捨てれば、UNICODE の API が簡単に使えてメリットも大
きいかと思います。
;; ちょっと自信なし

--
三好 雅則 http://miyoshi.meadowy.org/