Windows C++ デスクトップ アプリケーションの種類

C++ の "デスクトップ アプリケーション" はネイティブ アプリケーションであり、Windows API の完全なセットにアクセスし、ウィンドウまたはシステム コンソールで実行できます。 C++ のデスクトップ アプリケーションは Windows XP から Windows 11 までで実行できます (ただし、Windows XP は正式にサポートされなくなりましたが、その後の新しい Windows API は多数あります)。

C++ のデスクトップ アプリケーションは、C ランタイム (CRT) と標準ライブラリのクラスと関数、COM オブジェクト、公開されている Windows 関数 (これらを合わせて Windows API と呼ぶ) を使用できます。 C++ での Windows デスクトップ アプリケーションの概要については、「Win32 と C++ の概要」を参照してください。

次に示すように、C++ で作成できる Windows アプリケーションの広義のカテゴリがいくつかあります。 それぞれに独自のプログラミング モデルと Windows 固有のライブラリのセットがあります。 C++ 標準ライブラリとサードパーティの C++ ライブラリは、いずれでも使用できます。

Windows プラットフォーム自体に関するドキュメントは、Windows のドキュメントを参照してください。

ネイティブ デスクトップ クライアント アプリケーション

"ネイティブ デスクトップ クライアント アプリケーション"、または Win32 アプリケーションは、ネイティブ Windows C API またはコンポーネント オブジェクト モデル (COM) API CRT、標準ライブラリ API、サード パーティ製ライブラリを使用する C または C++ で記述された Windows デスクトップ アプリケーションです。 ウィンドウで実行される Win32 アプリケーションでは、開発者が Windows プロシージャ関数内で Windows メッセージを処理する必要があります。 その名前にかかわらず、Win32 アプリケーションは、32 ビット (x86) または 64 ビット (x64) のバイナリとしてコンパイルできます。 Visual Studio IDE では、x86 と Win32 という用語は同義です。

コマンド ライン (コンソール) アプリケーション

C++ コンソール アプリケーションは、コンソール ウィンドウでコマンド ラインから実行され、テキスト出力のみを表示できます。

UWP アプリケーション

ユニバーサル Windows プラットフォーム (UWP) は、最新の Windows API です。 UWP アプリは、Windows 11、Windows 10、XBox、Windows Phone、Surface Hub、およびその他のデバイスで実行されます。 UWP アプリは、ユーザー インターフェイスに XAML を使用し、完全にタッチ対応です。 デスクトップ アプリケーションは、ユニバーサル Windows プラットフォーム (UWP) アプリとは異なります。

UWP の元の C++ サポートは、C++/CX、構文拡張機能を含む C++ の言語、または標準の C++ および COM に基づく Windows ランタイム ライブラリ (WRL) で構成されていました。 C++/CX と WRL はいずれも引き続きサポートされますが、新規の開発にはお勧めしません。

新しいプロジェクトでは、C++/WinRT をお勧めします。これは、標準 C++ に完全に基づいており、より高速なパフォーマンスを実現します。

C++/CLI アプリケーションまたはコンポーネントでは、C++ 構文の拡張機能 (C++ 標準で許可されている) を使用して、.NET とネイティブの C ++ コードの間の連携を可能にします。 C++/CLI アプリケーションは、ネイティブで実行される部分と、.NET 基本クラス ライブラリへのアクセスを持つ .NET Framework で実行される部分を持つことができます。 C++/CLI は、C# または Visual Basic で記述されたコードを操作する必要があるネイティブ C++ コードがある場合に推奨されるオプションです。 これは、ユーザー インターフェイス コードではなく、.NET DLL で使用することを目的としています。

デスクトップ ブリッジ

Windows 10 以降では、既存のデスクトップ アプリケーションまたは COM オブジェクトを UWP アプリとしてパッケージ化できます。 これは、タッチなどの UWP 機能を使用することも、最新の Windows API セットから API を呼び出すこともできます。 また、UWP アプリを Visual Studio のデスクトップ ソリューションに追加し、それらを 1 つのパッケージにまとめてパッケージ化し、Windows API を使用してそれらの間で通信を行うこともできます。

Visual Studio 2017 バージョン 15.4 以降を使用すると、既存のデスクトップ アプリケーションをパッケージ化する作業を大幅に簡素化するために、Windows アプリケーション パッケージ プロジェクトを作成できます。 デスクトップ アプリケーションで使用できるレジストリ呼び出しまたは API には、いくつかの制限が適用されます。 ただし、多くの場合、代替コード パスを作成して、アプリ パッケージでの実行中に同様の機能を実現できます。

C++ または .NET?

一般に、C# での .NET プログラミングは、Win32 や MFC より複雑ではなく、エラーが発生しにくく、最新のオブジェクト指向 API をより多く備えています。 ほとんどの場合、そのパフォーマンスは十分ではありません。

.NET には豊かなグラフィックス用の Windows Presentation Foundation (WPF) が備わっているため、Win32 と最新の Windows ランタイム API の両方を使用できます。 原則として、以下が必要な場合は、デスクトップ アプリケーションに C++ を使用することをお勧めします。

  • メモリ使用の詳細な制御
  • 電力消費の最大限の節約
  • 一般的なコンピューティングでの GPU の使用
  • DirectX へのアクセス
  • 標準 C++ ライブラリの多用

C++ の能力と効率を .NET プログラミングと組み合わせることもできます。 C# でユーザー インターフェイスを作成し、C++/CLI を使用してアプリケーションでネイティブ C++ ライブラリを使用できるようにすることが可能です。

ゲーム

DirectX のゲームは、PC または Xbox で実行できます。

SQL Server データベースのクライアント

ネイティブ コードから SQL Server データベースにアクセスするには、ODBC または OLE DB を使用します。

Windows デバイス ドライバー

ドライバーは、ハードウェア デバイスのデータをアプリケーションやその他のオペレーティング システム コンポーネントからアクセスできるようにするための下位レベルのコンポーネントです。

Windows サービス

Windows "サービス" は、ユーザー操作をほとんどまたはまったく行わずにバックグラウンドで実行できるプログラムです。 これらのプログラムは UNIX システムで "デーモン" と呼ばれます。

  • 詳細については、「 サービス」を参照してください。

COM

コンポーネント オブジェクト モデル (COM) は、さまざまな言語で記述されたプログラムで相互運用できるようにするための仕様です。

多くの Windows コンポーネントは COM オブジェクトとして実装され、オブジェクトの作成、インターフェイスの検出、およびオブジェクトの破棄に関して標準的な COM 規則に従います。 C++ デスクトップ アプリケーションから COM オブジェクトを使用するのは比較的簡単ですが、独自の COM オブジェクトを作成する方がより高度です。

Active Template Library (ATL) には、COM 開発を簡略化するマクロとヘルパー関数が用意されています。 詳細については、「ATL COM デスクトップ コンポーネント」を参照してください。

MFC

MFC アプリケーションは、ユーザー インターフェイスを作成するために Microsoft Foundation Classes を使用する Windows デスクトップ アプリケーションです。 MFC アプリケーションでは、COM コンポーネント、CRT、標準ライブラリの API を使用することができます。

MFC は、ウィンドウ メッセージ ループと Windows API に対して、シン C++ オブジェクト指向ラッパーを提供します。 MFC は、多数のユーザー インターフェイス制御またはカスタム ユーザー コントロールがあるアプリケーション (特にエンタープライズ型のアプリケーション) のための既定の選択肢です。

また、MFC は、ウィンドウ管理、シリアル化、テキスト操作、印刷、最新のユーザー インターフェイス要素 (リボンなど) のための便利なヘルパー クラスを提供します。 MFC を効果的に使用するには、Win32 に精通している必要があります。

SDK、ライブラリ、およびヘッダー ファイル

Visual Studio には、C ランタイム ライブラリ (CRT)、C++ 標準ライブラリ、およびその他の Microsoft 固有のライブラリが含まれています。 これらのライブラリのヘッダー ファイルが格納されているフォルダーのほとんどは、\VC\ フォルダーの下の Visual Studio インストール ディレクトリにあります (C:\Program Files\Microsoft Visual Studio\2022\Enterprise\VC\Tools\MSVC\14.39.33519\include\ など)。 Windows と CRT の各ヘッダー ファイルは、Windows SDK のインストール フォルダーにあります (C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\ucrt\ など)。

vcpkg パッケージ マネージャーを使用すると、数百もの Windows 用サードパーティ製オープンソース ライブラリを簡単にインストールできます。 詳細については、「vcpkg」を参照してください。

Microsoft ライブラリには、次のものが含まれています。

  • Microsoft Foundation Classes (MFC): ボタン、リスト ボックス、ツリー ビュー、および他のコントロールを使用した豊富なユーザー インターフェイスを持つ従来の Windows プログラム (特にエンタープライズ アプリケーション) を作成するためのオブジェクト指向フレームワーク。 詳細については、「 MFC Desktop Applications」を参照してください。

  • Active Template Library (ATL): COM コンポーネントを作成するための強力なヘルパー ライブラリ。 詳細については、「 ATL COM Desktop Components」を参照してください。

  • C++ AMP (C++ Accelerated Massive Parallelism): GPU で一般的な計算作業のパフォーマンス向上を可能にするライブラリ。 詳細については、「 C++ AMP (C++ Accelerated Massive Parallelism)」を参照してください。

  • コンカレンシー ランタイム: マルチコア デバイスおよびメニーコア デバイス用の並列プログラミングおよび非同期プログラミング作業を簡略化するために役立つライブラリ。 詳細については、「コンカレンシー ランタイム」を参照してください。

Windows プログラミングの多くのシナリオでは、Windows SDK も必要になります。これには、Windows オペレーティング システム コンポーネントへのアクセスを可能にするためのヘッダー ファイルが含まれています。 既定では、Visual Studio によって、Windows SDK が C++ デスクトップ ワークロードのコンポーネントとしてインストールされます。これにより、ユニバーサル Windows アプリの開発が可能になります。 UWP アプリを開発するには、Windows SDK の Windows 10 以降のバージョンが必要です。

  • 詳細とダウンロード リンクについては、Windows SDK に関する記事を参照してください。
  • 以前のバージョンの Windows 向けの Windows SDK の詳細については、Windows SDK のアーカイブに関する記事を参照してください。

インストールするすべてのバージョンの Windows SDK の既定の場所は次のとおりです: Program Files (x86)\Windows Kits

開発ツール

Visual Studio には、ネイティブ コード用の強力なデバッガー、スタティック分析ツール、グラフィックス デバッグ ツール、フル装備のコード エディター、単体テストのサポート、その他多数のツールおよびユーティリティが含まれています。

このセクションの内容

リンク 説明
チュートリアル: Windows デスクトップ アプリケーション (C++) の作成 ネイティブ Windows デスクトップ アプリケーションを作成します。
方法: Windows デスクトップ アプリケーションでの Windows SDK の使用 Windows SDK を使用してビルドするプロジェクトの設定手順が示されています。
チュートリアル: 標準 C++ プログラムの作成 Windows コンソール アプリケーションを作成します。
チュートリアル: C++ でコンソール電卓を作成する シンプルな Windows コンソール アプリケーションを作成します。 Win32 (または Win64) コンソール アプリケーションには、独自のウィンドウとメッセージ ループはありません。 コンソール ウィンドウで動作し、入出力はコマンド ラインを使用して扱われます。
ネイティブ デスクトップ アプリケーションの配置 Windows にネイティブ アプリケーションを配置します。
チュートリアル: スタティック ライブラリの作成と使用 .lib バイナリ ファイルを作成する方法。
Windows デスクトップ ウィザード ウィザードを使用して、新しい Windows プロジェクトを作成します。
Active Template Library (ATL) ATL ライブラリを使用して、C++ で COM コンポーネントを作成します。
ATL と MFC の共有クラス ATL と MFC で共有される CString などのクラスを使用します。
Microsoft Foundation Classes (MFC) MFC を使用して、ダイアログとコントロールを含む大規模または小規模な Windows アプリケーションを作成します
データ アクセス OLE DB と ODBC
テキストと文字列 Windows 上のさまざまな文字列型。
リソース ファイルの操作 画像、アイコン、文字列テーブル、その他のリソースをデスクトップ アプリケーションに追加する方法。
DirectX を使用するゲームを作成するためのリソース (C++) C++ でゲームを作成するためのコンテンツへのリンク。
Title 説明
Windows での開発 Windows API と COM に関する情報が含まれています (一部の Windows API とサードパーティ製 DLL は、COM オブジェクトとして実装されています)。
Hilo: Windows 7 対応 C++ アプリケーションの開発 手荷物の受け取り場所に基づくユーザー インターフェイスを作成するために、Windows Animation と Direct2D を使用するリッチ クライアントの Windows デスクトップ アプリケーションを作成する方法について説明します。 このチュートリアルは Windows 7 から更新されていませんが、Win32 プログラミングについて詳しく説明されています。
C++/CLI による .NET 開発 ネイティブ C++ ライブラリのラッパーを作成します。これにより、.NET アプリケーションやコンポーネントとの通信が可能になります。
.NET および UWP 用のコンポーネント拡張 C++/CX および C++/CLI で共有される構文要素のリファレンス。
ユニバーサル Windows アプリ (C++) C++/CX または Windows ランタイム テンプレート ライブラリ (WRL) を使用して UWP アプリケーションを記述します。
COM および .NET 用の C++ の属性 .NET または COM を使用した Windows 専用プログラミング向けの非標準属性。

関連項目

Visual Studio での C++