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( ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access