Windows周りの文字型文字列型文字コードのまとめ - inoueshinichi/Wiki_Windows GitHub Wiki
- HString::HString (WRT) https://learn.microsoft.com/ja-jp/cpp/cppcx/wrl/hstring-class?source=recommendations&view=msvc-170
- Platform::String (C++/CX) https://learn.microsoft.com/ja-jp/cpp/cppcx/platform-string-class?view=msvc-170
- hstring (WinRT/C++) https://learn.microsoft.com/ja-jp/uwp/cpp-ref-for-winrt/hstring
- HSTRING (Windows Runtime) https://learn.microsoft.com/ja-jp/windows/win32/winrt/hstring
文字コード | 種類 | 特徴 |
---|---|---|
Shift_JIS | マルチバイト文字 | 半角文字(ASCII) 1byte, 全角文字 2byte |
UTF-16 | ワイド文字 | 基本的に全文字 2byte, 一部の文字が4byte. WindowsAPIのコアに使われる |
UTF-32 | - | 全世界の文字の種類を4byteで表現しようとしている |
UTF-8 | マルチバイト文字 | ASCII文字 1byte, 多くの日本語 3byte, 一部の文字 4byte, 全世界の言語を含んで最大1文字 6byte. Unix系の基本文字コード |
- WindowsAPIのコアがUTF-16を使用している限り, WindowsプログラムではUTF-16を使うべき.
- UTF-8は文字の種類によってバイト数が異なるので, 注意すべき.
- UTF-8のASCII文字1byte表現とShift_JISの半角文字1byte表現が共通であり, 直接変換できる.
種類 | 内容 |
---|---|
C/C++言語 | C/C++言語の標準組み込み |
STL | STLライブラリの標準組み込み |
Windows-C/C++ | MicrosoftがC/C++標準機構に準拠していなかった時期に独自に定義したWindows組み込み |
Windows-OLE ※オワコン | Object Linking and Embedding. Windowsの機能・仕様の一つで、複数のソフトウェアが連携したり、データを共有したりするための仕組み. |
Windows-COM 現役 | Component Object Model. OLEの後身. Microsoft社が提唱していた,ソフトウェアの機能を部品化して,外部から日々出して利用する仕組みを定めた技術仕様. 内部実装としてはC++の抽象インターフェースクラスとDLLライブラリで成り立っている. VC++からExcelやWordなどを操作するときに使う. DirectX系はCOMに属するのでゲーム開発などでは現在も主流. |
Windows-DCOM 現役 | Distributed COM. 拡張COM. |
Windows-ActiveX ※オワコン | OLEの仕組みをインターネットなどの通信ネットワークを通じて利用できるようにしたもの. 一般的に単にActiveXといった場合には, WebサーバからWebブラウザにソフトウェア部品を送信し, 即座に実行することができる「ActiveXコントロール」(ActiveX Control)のことを指すことが多い. |
Windows-ATL 現役 | Active Template Library. COMプログラミングを容易に行えるようにMicrosoft社によるテンプレートベースのC++専用ライブラリ. VC++からExcelやWordなどを操作するときに使う. |
Windows-MFC ※オワコン | Microsoft Foundation Class. Win32APIを利用しやすいように独自クラスでラッパーしたフレームワーク. 現在はWindows-CLI(.Net Framework)が主流のため, 衰退気味だが, 未だにC/C++でGUI実装するときには便利フレームワーク. |
Windows-CLI(C++/CLI) ※オワコン | Common Library Interface. .Net Framework(COM+新規MicrosoftWindowsAPI)にアクセスする際に使用する(主にC#とのブリッジ). .Net Frameworkはガーベッジコレクション(GC)を実装している. WindowsではGCを実装しているコードをマネージドコード, そうでないコードをアンマネージドコードとして分けている. また, 年代で呼び名が変わる. 2003年以前: C++マネージ拡張, 2003年以降: C++/CLI |
Windows-CX(C++/CX) ※オワコン | C++/CLIの後継. Windows 8 の Windows ストアで配信するアプリケーション開発に特化した C++ を拡張する構文を持つ. |
Windows-WRL 影が薄い | Windows Runtime C++ Template Library. ATLの後継. ただし, C++標準に基づく形式で実装されている. 内部ではATLを使用しているが, COM用にATLが提供していたいくつかの機能が省略されている. |
Windows-(C++/)WinRT 使いずらい | Windows Runtime. WRLの後継. C++17標準に基づく新しい形式で実装されている. ネイティブ拡張であるC++/CX, C#, JavaScript, TypeScriptの開発を支援する. Windows SDK 10.0.17134.0 以降は標準C++も選択できるようになった(C++/WinRT) |
- MicrosoftとしてはCOMと共通基盤ライブラリを持つ.Net Framework(多種多様なプラットフォームにおける共通基盤)をユーザーに利用することを求めている
- C++ネイティブ開発者は, ATL(Microsoft規定), WRL(標準C++規定), C++/WinRT(標準C++17規定)のAPIを通じて.Net Framework(=COM実装)にアクセスして機能を利用する必要がある
- C++ネイティブ開発者は, Windowsの中核であるCOMの仕様やAPIを勉強しろ!(DirectXもCOM実装だし...)
- WindowsOSの真髄は, 共通インターフェース仕様(COM)と共通モジュール(COMに基づいたDLL).
文字(列)型 | 内容 |
---|---|
char | 1byte. Shift-JISとUTF-8のASCIIに対応. |
char16_t | 2byte. ワイド文字. UTF-16に対応. |
char32_t | 4byte. UTF-32に対応. |
wchar_t | 2byte. char16_tのエイリアス. |
文字(列)型 | 内容 |
---|---|
std::string | const char* を内部表現に持つ. |
std::u16string | const char16_t* を内部表現に持つ. |
std::u32string | const char32_t* を内部表現に持つ. |
std::wstring | const wchar_t* を内部表現に持つ. |
文字(列)型 | 内容 |
---|---|
CAHR | charのエイリアス. |
WCHAR | wchar_tのエイリアス. |
TCHAR | charとwchar_tを定義済みプリプロセッサによって切り替える型. |
PSTR | 32bitポインタ型. char*のエイリアス. x86アーキテクチャで使用する. |
LPSTR | 64bitポインタ型. char*のエイリアス. x64アーキテクチャで使用する. |
PCSTR | PSTRのconst版. const char*のエイリアス. |
LPCSTR | LPSTRのconst版. const char*のエイリアス. |
PWSTR | 32bitポインタ型. WCHAR*のエイリアス. x86アーキテクチャで使用する. |
LPWSTR | 64bitポインタ型. WCHAR*のエイリアス. x64アーキテクチャで使用する. |
PWCSTR | PWSTRのconst版. const WCHAR*のエイリアス. |
LPWCSTR | LPWSTRのconst版. const WCHAR*のエイリアス. |
- #include <tchar.h>でマルチバイト系とワイドバイト系の型特性を操作できる.
- WinAPI関数の末尾にAが付随するものはCHAR対応.
- WinAPI関数の末尾にWが付随するものはWCHAR対応.
- WinAPI関数では, 上記のAとWの両方をプログラム時に切り替えられるようにマクロ関数が定義されている.
文字(列)型 | 内容 |
---|---|
OLECHAR | WCHARのエイリアス |
BSTR | OLECHAR*のエイリアス. Visual Basicの文字列型 |
_bstr_t | BSTRのC++ラッパークラス |
文字(列)型 | 内容 |
---|---|
未調査. |
文字(列)型 | 内容 |
---|---|
未調査. |
文字(列)型 | 内容 |
---|---|
未調査. |
文字(列)型 | 内容 |
---|---|
CComBSTR | Visual Basic文字列(BSTR)型用のもう1つのC++ラッパークラス |
CString | CHAR型(マルチバイト文字)とWCHAR型(ワイド文字)を自動変換してくれる文字列クラス. かなり便利. #include <atlstr.h>が必要. |
文字(列)型 | 内容 |
---|---|
CStringA | const CHAR*を内部表現に持つテンプレートクラス |
CStringW | const WCHAR*を内部表現に持つテンプレートクラス |
CStringT | 内部表現を指定できるテンプレートクラス. const CHAR*, const WCHAR*, const char16_t*, const char32_t* など |
CString | CStringAとCStringWを自動切り替えで利用できるクラス. かなり便利. |
文字(列)型 | 内容 |
---|---|
String^ | C++/CLI言語でC++から.Net FrameWorkを利用するための拡張. ^はヒープ領域にメモリを格納する意味.C++/CLI言語ではクラスをガーベッジコレクションで破棄させるようにしている. |
文字(列)型 | 内容 |
---|---|
Platform::String^ | (C++/CLI)のヒープ型文字列String^ と同じ. |
Platform::String | オリジナルとしてHSTRING(Windowsランタイム文字列へのハンドル)を背後で操作する. char16 UNICODE テキスト文字の配列. |
Platform::StringReference | 最小のコピー操作でPlatform::String^ 入力パラメーターから他のメソッドに文字列データを渡すために使用できる最適化の手法. |
文字(列)型 | 内容 |
---|---|
HString::HString | RAIIを利用してHSTRINGハンドルの生存期間を管理する文字列クラス. 内部表現はUTF-16文字のHSTRINGハンドル. |
文字(列)型 | 内容 |
---|---|
winrt::hstring | std::wstringと同じUTF-16 Unicode 文字のシーケンシャル. 加えて, オリジナルとしてHSTRING(Windowsランタイム文字列へのハンドル)を背後で操作する. |
- 各言語で定義される文字列と共通性を持つ | 言語 | 文字列表現 | | :-- | :-- | | WinRT/C++ | winrt::hstring クラス | | C++/CX | Platform::String クラス | | JavaScript | String オブジェクト | | .Net Framework | System.String クラス |