あるかどうかでエラー判断を行ってしまうと、正しく処理できなくなってしまうので、注意しなくてはいけません。関数がエラー時にどちらの値を返すかは、API関数のリファレンスを参照して判断しなくてはなりません。他にもDWORD型やLONG型など、上記のデータ型以外の戻り値を返すAPI関数も、多く存在します。これらの関数の戻り値は関数によってさまざまで、エラーが発生したときにどのような戻り値が返るかはそれぞれの関数によります。これらについてはAPI関数のリファレンスに記述されているとおりにしなければなりません。API関数の中には、エラーが発生したときに戻り値でエラーがあることを通知すると同時に、発生したエラーがどのようなものであるかを表すエラーコードを設定するものがあります。これらの関数の処理中にエラーが発生したとき、呼び出したスレッドにエラーコードが割り当てられます。このエラーコードはスレッドごとに割り当てられるものであるため、マルチスレッドアプリケーションのある1つのスレッドのエラーコードが置き換わっても、別のスレッドのエラーコードは影響を受けないようになっています。(HSPはシングルスレッドであるため、マルチスレッドについてはあまり関係ありませんが。)関数を呼び出して、返された戻り値がエラーの発生を知らせてきた場合、それがどのようなエラーかを知るためには、kernel32.dllが提供するGetLastError関数を呼び出します。GetLastError();この関数は、単純にスレッドのエラーコードを戻り値として返します。このGetLastError関数を使う上で注意すべきことがあります。1つは、関数がエラーを起こした場合には、直ちにGetLastError関数を呼び出すべきであるということです。他のAPI関数を呼び出した場合に、エラーコードが上書きされてしまう可能性があるためです。次に、すべての関数がエラー発生時にエラーコードを設定するわけではないということです。95/98/Meでは、関数のコードの多くが16ビット版Windowsの時代の16ビットコードをそのまま用いて実装されているため、そういった関数ではGetLastError関数によるエラーコード報告がされるように実装されていないのです。API関数のリファレンスを参照して、関数がGetLastError関数によるエラーコード取得をサポートしているかどうかを確認する必要があります。API関数は、エラーが発生したときのみエラーコードを書き換えるということです。呼び出されたAPI関数が成功した場合には、このエラーコードは以前のままで、変更されることがありません。したがって、API関数の戻り値がエラーを示す値であった場合にだけ、GetLastError関数を呼び出してエラーコードを取得するようにしなくてはなりません。API関数には、成功した場合にもエラーコードを書き換えるものがあります。このような関数はAPIのリファレンスにそのことが明記されています。HSPの中で、エラー発生時にそのエラーを特定するためにGetLastError関数を呼び出すことはほとんどありません。ほとんどの場合は、関数の戻り値だけで判断すれば十分だからです。実際に必要となるのは、成功した場合でもエラーコードを書き換えるタイプの関数に対してです。これについては後で述べていくことになると思います。