ぷるぷるの雑記

低レイヤーがんばるぞいなブログ. 記事のご利用は自己責任で.

Visual Studio におけるC++の種類

なんかよくわからないですけどVisual StudioにおけるC++アプリケーションっていろんな種類があるじゃないですか. 自分なりにまとめてみました.

以下、Visual Studio上のC/C++を総称してMSVCと呼ぶことにします.

実行形式による区分

MSVCはネイティブコードを作るものとCLR(Common Language Runtime)上で動くプログラムを作るものに大別されます.

ネイティブコードは特に何も考えずWindows上で実行することが出来ます(別途dllは必要). CLR上で動くアプリの場合、アプリを実行するためにさらに他のプログラムが必要ですが、他のCLR上で動くプログラム(≒C#)と連携がとりやすいというメリットがあります.

難解なのが、それぞれの区分でさらに分類することが出来る点です.

ネイティブコードの小区分

Windows API

生のWindows APIを使用するプログラムです. 一周回ってよく使われるかもしれません. Visual Studioのプロジェクト作成ウィザードで「コンソール アプリ」や「Windows デスクトップ アプリケーション」を選択すると作成することが出来ます. C++を使わずにプログラムを作ることが出来るので学習目的に使われることが多い印象です.

Windows APIを使用するプロジェクト

MFCアプリケーション

MFC(Microsoft Foundation Class)というWindows APIC++のクラスにしたライブラリを使用するプログラムです. したがって強制的にC++を使用することになります.プログラムの実行には適合したバージョンのmfc.dllとCRTが必要になりますが、Visual Studio2015以降はすべて統一されているので今となってはバージョンによる差がないといってよいです. 動的ライブラリは作れるようですが、静的ライブラリは作成できないようです.これはおそらくMFCの実体がDLLなため、MFCを依り代にする静的ライブラリというものの存在が矛盾するからではないでしょうか.

MFCを使用するプロジェクト

WinRT

WinRTという、ざっくり言えばC++で書き直されたモダンなWindows APIを使用するプログラムです. Window APIC/C++の両方から呼び出すことが出来ました. MFCC言語の関数の形で提供されるWindows APIを呼び出しやすくしたC++のクラスライブラリでした. WinRTはこれらを合体させモダンな形にしたものと言えそうです. .NET上で動く言語にも恩恵があるようですが、それ以上にC++との相性が良いという印象です.

WinRTを使うプロジェクト

CLR上で動くプログラムの小区分

CLR上で動く前提のC#に遅れること5年、2005年にCLR上で動作するMSVCが登場しました.

.NET Framework

いわゆるメジャーバージョンが5未満のCLRを使用するプログラムです. 「CLR 空のプロジェクト(.NET Framework)」や「CLR コンソール アプリ(.NET Framework)」を選択すると作成することが出来ます. クラスライブラリを作ることもできます.

.NET Frameworkを使うプロジェクト

.NET

いわゆるメジャーバージョンが5以上のCLRを使用するプログラムです. 「CLR 空のプロジェクト(.NET)」を選択すると作成することが出来ます. ウィザード上の説明文は.NET Frameworkと同じなので、互換性以外は.NET Framework と大差ないのかもしれません.

.NETを使うプロジェクト

その他

.NET Frameworkや.NET上で動く中間コードを吐くプログラミング言語のことをマネージ言語という.

C++マネージ拡張というものが過去にあったが、察し.

CLI(Common Language Infrastructure)は規格名で、CLRMicrosoftによるCLI実装のことを指す.

多分ですが、GUIとの連携はC#をメインに使い、補助的にC++/CLRで作られた処理を呼び出すという形式が多いのではないかと予想.

参考

ja.wikipedia.org

learn.microsoft.com

learn.microsoft.com

learn.microsoft.com

ja.wikipedia.org