AttachConsole関数の動作する環境についてなのですが、
実行できるWindowsのバージョンが決まっているようなのですが、
諸説あって、自分の中で情報が錯綜している状況です。
ということで、今時分の手元にある情報を書き出してみます。
まず、その諸説というのですが、実行できるOSが
Windows 2000以上か、XP以上か、というものです。
まず、話のベースとなる情報を提示します。
WIN32WINNTの値とOSのバージョンの対応
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winprog/winprog/using_the_windows_headers.asp
AttachConsole関数
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/attachconsole.asp
次に、集めた情報について、Windows 2000以上、Windows XP以上という
二つの項目に分けて、情報を表示し、適宜引用やリンクをします。
○Windows 2000以上(WIN32WINNT が 0x500 以上)
・MSDNのAttacheConsole() に関する説明(上記、二つ目のURL)の "Remarks" の文章。
"To compile an application that uses this function, define WIN32WINNT as 0x0500 or later."
(この関数を使ったアプリケーションをコンパイルするには、
WIN32WINNTの値を0x0500かそれより大きい値として定義する。)
・WinCon.h の内容。
この関数を定義しているヘッダを参照すると、以下のように記述されている。
WINBASEAPI
BOOL
WINAPI
AttachConsole(
IN DWORD dwProcessId
);
つまり、これを見る限りだと、指し示す値は、Windows 2000 以上となる。
○Windows XP以上(WIN32WINNT が 0x500 より大きい)
・巷の情報。
あんまり、過信するべきではないと思うが、巷の情報ではXP以上という話。
・MSDNのAttacheConsole() に関する説明の "Requirements" の文章。
ここには、"Requires Windows Vista or Windows XP."となっている。
上で 0x500 以上と断っておいてここでこういわれると、もうどうしよもない・・・。
総合的に見ると、ヘッダが一番有力的な情報ではあると思う。
しかし、それ自身はただ単に実行の制限を行っているに過ぎないので、
結局のところ、さらに奥まった内部の部分を見ないとわからない。
#以下愚痴
第一、Windows XPでコンパイルして、実行してるのにどうして動かないのかと orz
XPに関しては、両方の共通部分として入ってるから、動くはずなのに。。。
一部、動作不安定という報告もあるけど、それが原因なのかさっぱり。
3台実験して、3台ともだめ。もう、、、