C++ マネージ拡張では Hello World がどのように記述されるかを次のコードに示します。
リスト 1. C++ マネージ拡張での Hello World (HelloVC.cpp)
#using <mscorlib.dll>
// Allow easy reference to the System namespace classes.
using namespace System;
// The global function, main, is the application's entry point.
void main() {
// Write text to the console.
Console::WriteLine(S"Hello World using Managed Extensions for C++!");
}
プログラム全体はわずか数行のコードですが、注意しておく必要がある点がいくつかあります。最初に次の行について考察します。
#using <mscorlib.dll>
C++ マネージ拡張では、#using
ディレクティブは、タイプ ライブラリから情報を組み込むために使用される #import
ディレクティブと似ています。上の 2 つのディレクティブは、事前に構築されているライブラリではなくソース コードを組み込むために使用される #include
ディレクティブとは異なります。また、名前空間をプログラムにインポートするには、つまり、System オブジェクトのパスを完全に限定せずに簡単に参照できるようにするには、次のような追加のステートメントが必要となります。
using namespace System;
次に、以下の行を考察します。
void main() {
エントリ ポイント main にコマンド ライン引数が指定されていませんが、複雑なプログラムの場合は、この部分もより高度になることは明らかです。また、このエントリ ポイントは戻り値がありませんが、終了コードとして使用する単精度の 32 ビット値を返すようにこの関数を変更することもできます。
次の行は、以下のようになっています。
Console::WriteLine(S"Hello World using Managed Extensions for C++!");
この行は、このプログラムの中核部分であり、ランタイム Console 型を使用して文字列を出力します。Console 型は、Read、ReadLine、Write、WriteLine の各メソッドによって任意の文字列または数値の入出力用に使用されます。前述したように、Console::WriteLine 内の二重コロンは、C++ マネージ拡張ではスコープを示すために必須です。二重コロンによって、名前空間とクラス名またはクラス名と静的メソッドが区別されます。最後に、文字列の前にある S は、この部分を、マネージ コードで C++ リテラル文字列よりも優れたパフォーマンスを示す System::String*
にするようにコンパイラに指示します。
Build.bat ファイルに含まれる次の行には、このプログラムをビルドするために必要なすべての内容が含まれています。
cl.exe /Zi /clr HelloVC.cpp
まず、/clr スイッチに注意する必要があります。このスイッチは、ランタイムによって要求されたとおりにマネージ コードを作成するようにコンパイラに指示します。Build.bat を実行すると、次の出力が生成されます。
C:\...\HelloWorld\vc>build
C:\...\HelloWorld\vc> cl.exe /Zi /clr HelloVC.cpp
Microsoft (R) C/C++ Optimizing Compiler...
Copyright (C) Microsoft Corporation 1984-2001. All rights reserved.
HelloVC.cpp
Microsoft (R) Incremental Linker ...
Copyright (C) 1992-2001 Microsoft Corporation. All rights reserved.
/out:HelloVC.exe
/debug
HelloVC.obj
最後に、生成された実行可能ファイルを実行すると、次の出力が得られます。
C:\...\HelloWorld\vc>hellovc
Hello World using Managed Extensions for C++!
参照
Visual C# での Hello World | Visual Basic での Hello World | サンプル .NET コンポーネントの作成 | 単純なコンポーネントのクライアント | 開発チュートリアルのまとめ | 付録 A: 名前空間を検索するためのツール