CLR Executables
Microsoft .NET executables are different from typical Windows executables in that they carry not only code and data, but also metadata (see “Metadata” and “Intermediate Language” later in this chapter). In this section, we start off with the code for several .NET applications, and then discuss the .NET PE format.
Hello, World: Managed C++
Let’s start off by examining a simple Hello, World application written in Managed C++, a Microsoft .NET extension to the C++ language. Managed C++ includes a number of new .NET-specific keywords that permit C++ programs to take advantage of .NET’s new features, including garbage collection. Here’s the Managed C++ version of our program:
#using <mscorlib.dll>
using namespace System;
void main( )
{
Console::WriteLine(L"C++ Hello, World!");
}
As you can see, this is a simple C++ program with an additional
directive, #using
(shown in bold). If you have
worked with the Microsoft Visual C++ compiler support features for
COM, you may be familiar with the
#import
directive. While #import
reverse-engineers type
information to generate wrapper classes for COM interfaces,
#using
makes accessible all types from the
specified DLL, similar to a #include
directive in
C or C++. However, unlike #include
, which imports
C or C++ types, #using
imports types for any .NET
assembly, written in any .NET language.
The one and only statement within the main( ) method is self-explanatory—it means that we are invoking a static or class-level method, WriteLine( ...
Get .Net Framework Essentials now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.