Windows プログラミングメモ

コンパイラの入手

プログラミングを行なうには、何はともあれコンパイラが必要です。 現在 Windows のプログラミングが可能なコンパイラは2種類あると 思います。

Borland C++Builder 5 (http://www.borland.co.jp/cppbuilder/freecompiler/)

ボーランド社が無償で提供しているC++コンパイラ。製品レベルのコンパイラが 無償で手に入るのは大変ありがたい。

Cygwin (http://cygwin.com)

Cygwin という Windows 上で UNIX 風な環境を提供しようとするライブラリと アプリケーション群。Native な Win32 アプリケーションも付属の コンパイラで作成可能。

プログラミング

Winsock の初期化

socket やら bind やらの、いわゆるソケット API を呼び出す 前に初期化してやらないといけない。いわゆるおまじない。

WSADATA wsaData;
if (WSAStartup(MAKEWORD( 2, 2 ), &wsaData)) {
        return 1;
}
変数の意味は知らないし、知りたいともおもわんよ。

thread の作成

スレッドを作成するには、

  1. CreateThread()
  2. _beginthread()
  3. _beginthreadex()        

の3つの関数があるのだけれど、CreateThread() は作成したスレッドの C の標準関数の初期化をしないらしく、使ってはいけないらしい。 つまり、Win32API のみの呼出しが可能らしい。

_beginthread() は返すハンドルが無効らしい。なので外部からは なにもできなくなるらしい。

で、_beginthreadex() がまともな関数らしい。引数は CreateThread と 同じみたい。情報源は、

http://www.catkk.co.jp/~ando/milk/tips/win/createthread.html

なのでそちらを参照。すごい仕様。じゃあ CreateThread なんて つくんなよ。こんなすごいことがあるかと思うと Windows プログラム なんてつくりたくなくなるな。

ghost icons in the taskbar

なんかまた、すごいことが、プロセスが終了してもタスクバーにアイコンが のこる現象について、

http://www.sun-inet.or.jp/~yaneurao/rsp/rsp38to3F.html

に解説があります。Windows ってプログラミングすると、すごい ことが色々わかって、すごい。DestroyWindow の中で ShowWindow するって なんか、すごい。Microsoft って、すごい。ちなみに、このページは プログラミングするひとには色々面白い。

http://www.sun-inet.or.jp/~yaneurao/rsp/

ShellExecute で launch したファイルが終了時に固まる

ShellExecute などで指定したファイルをオープンしたあとに Word で開いたなら、Word を終了しようとすると、固まる、 という現象に遭遇。試行錯誤の末、_beginthreadex で spawn した thread 内で ShellExecute すると固まる模様。main(?) thread で 起動した場合にはOK。理由は知らん。

Valid HTML 4.01! Valid CSS!