プロジェクト

全般

プロフィール

Windows API

文字コードの扱い

Windows APIでは、歴史的経緯により文字コードをバイト列で扱うマルチバイト文字と、Unicodeで扱うワイド文字が混在しています。
Windows 95/98/Meといったワイド文字がないOSと、ワイド文字を基本とするWindows NT系(NT/2000/XP/Vista/7/8/10やそのServer OS)です。
文字/文字列を扱うAPIでは、マルチバイト文字版とワイド文字版と2つの関数が用意されています。

  • SetWindowTextA マルチバイト文字
  • SetWindowTextW ワイド文字

SetWindowText というのは実はマクロで、プリプロセッサがUNICODE定義の有無を見てどちらかに置き換えています。また、ワイド文字を基本とするOSでは、マルチバイト文字のAPIを呼ぶと、内部でマルチバイト→ワイド文字への変換を行っています(オーバーヘッドが発生)。

どちらのOSにも同じソースでプログラミングができるように、Windows SDKでは文字を扱う型をTCHARマクロで記述し、プリプロセッサで実際の型に置き換える仕掛けが用意されています。
しかしながら、このTCHARをC++(標準規格)で使う場合、C++の標準ライブラリ(特にstd:string系)との相性が悪いという問題があります。C++の文法は使うがライブラリはMFCを使うというC++標準規格制定前のレガシーな代物です。

MSDN - Working with Strings の記事において、

New applications should always call the Unicode versions.

とあるように、これからはTCHARを使わないのがよさそうです。

Windows Sensor and Location API

加速度計、ジャイロ、方位、磁針、明るさなどの各種センサー、GPSなどを扱うAPIです。COM形式で提供されます。

Location API

主にGPSを利用するAPIです。

COM(Component Object Model)

Windows OSはAPIを提供する際の方式としてCOMを多用しています。COMは、C言語だけでなく、各種言語からアクセスできるように設計されています。
COMは、インタフェースと実装から構成されます。