360 likes | 562 Views
Managed C++. Objectives. Overview to Visual C++.NET Concepts and architecture Developing with Managed Extensions for C++ Use cases Managed C++, Visual Studio.NET and the .NET Framework. Contents. Section 1: Overview Section 2: New features in Visual C++.NET
E N D
Objectives • Overview to Visual C++.NET • Concepts and architecture • Developing with Managed Extensions for C++ • Use cases • Managed C++, Visual Studio.NET and the .NET Framework
Contents • Section 1: Overview • Section 2: New features in Visual C++.NET • Section 3: Managed extensions for C++ • Section 4: Writing managed C++ applications • Questions
Section 1: Overview • Looking back • Managed Execution
Looking back • Object-oriented programming • COM+ • Most successful component model in history • Only viable commercial component platform • Enables cross-organization integration and reuse
Looking back • Microsoft Foundation Classes (MFC) • C++ class libraries • Encapsulation of the Windows API • Defacto standard for Windows development • Active Template Library (ATL) • C++ templates for COM development
What’s wrong with that? • COM shows its age • DCOM does not function well over the Internet • More component based systems, more "DLL Hell" • Difficult to implement • Not truly language agnostic • Makes some assumptions of binary layout • "Least-common denominator" type system only • Continuously growing API set • Inconsistencies in programming model
Managed Execution SourceCode IL &Metadata Compiler Common Language Runtime (incl. CTS and CLS) ClassLib Class Loader JIT Compiler ManagednativeCode Execution
Section 2: New features in VC++.NET • Visual C++.NET • Compiler options • Linker options • New Keywords and types • Managed Extensions
Visual C++.NET • New features • Compiler and linker options • New preprocessor features • Keywords and types • Attribute based programming • Easy COM programming • Event Handling • Managed Extensions
Managed Extensions • C++ language extensions • Access to the .NET Framework Unmanaged classes Managed classes COM Interop PInvoke MFC / ATL .NET WIN32 API
Compiler options • New options in all categories • Some samples • Debugging • Code generation • Misc /GS – generate security check/RTC – enables runtime check/Wp64 – detects 64bit portability problems /GL – enables complete program optimization /Wall, /w – enables/disables all warnings
/CLR • Common Language Runtime (CLR) compilation • Creating managed code • Application must include • Enables Managed Extensions • For all functions • But not for classes, interfaces, or structs (see __gc) #using <mscorlib.dll>using namespace System;
Linker options • Samples • Unmanaged development • Managed Extensions /TSAWARE – create terminal server aware application /LTCG – link-time code generation, combination of /GL and /c, enables complete programming optimization /ASSEMBLYMODULE – add an IL module to an assembly /ASSEMBLYRESOURCE – link to a managed resource /NOASSEMBLY – create an IL module
Keywords and types • New types samples • wchar_t - is now a native data type • __m64, __m128 - Microsoft specific data types for use with MMX and SSE • Keywords (Managed Extensions) • __delegate - declares a reference to a method • __property - declares a property for a managed class • __gc - declares a garbage collected class • __event, __abstract, __interface, __value, ...
Section 3: Managed Extensions • Language interoperability • Managed code • Garbage Collection • Exception Handling
Language interoperability • Managed class types • __gc Garbage collected classes • __value Value classes • __gc __interface Managed interface classes • Managed Arrays • __gc keyword • String literals • One string for all! Int MyIntArray __gc[] = new int __gc[100];
Interoperability • Delegates • Object-oriented function pointer • __delegate keyword • Single- and multicast delegate • Properties of managed objects • Pseudo data member • __property keyword • Scalar and indexed properties
Garbage Collection • Automatic memory management • Memory is allocated and freed by the CLR • Managed Heap • Managed data • Access through managed code • Declare objects as managed/unmanaged • __gc and __nogc keywords • #pragma managed/unmanaged
GC – in depth • Roots • Each application has a list of references • Used objects in managed heap • Objects which are set to null • Problems with the collection point of time • Sometimes resources have to be freed immediately
GC and your destructor • Destructor ? • Managed objects never have destructors • Finalization ! • ... is called automatically • Close and Dispose • Control over clean-up
__gc sample #using <mscorlib.dll>using namespace System;__gc class GcInt {public: int ReturnInt() { return 5; }};int callGcInt() { GcInt* pgci; pgci = new GcInt; return pgci->ReturnInt();}void main() { Console::WriteLine( callGcInt() );} No delete !
Handling exceptions • Structured (SEH) and C++ exception handling • Throwing exceptions • Pointer to managed objects • Try/catch block • Like unmanaged code • __finally keyword • Clean up resources • Always (!) executed
Section 4: Applications w/ VC++.NET • Use cases • Migration • MFC, ATL, and .NET • Managed vs. unmanaged
Operational areas • Interaction • Unmanaged C++ and .NET code • Mixing • Managed and unmanaged code within one executable • Migration • from unmanaged C++ code to the .NET Framework
Interaction I • Accessing .NET Framework from unmanaged code .NET Framework Unmanaged world Managed Extensions CCW
The Type Library Exporter • Command line tool • Takes CLR assembly to generate type library • Input: .NET assembly • Output: .tlb TlbExp assembly [/out:file] [/silent] [/verbose] [/nologo]
Interaction II • Accessing a C++ object from the .NET Framework .NET Framework Unmanaged world RCW
The Type Library Importer • Command line tool • Convert COM type definitions into .NET metadata • Input: .tlb, .dll, .odl, .ocx, or .exe • Output: metadata DLL TlbImp tlblib [/out:file] [/publickey:file] [keyfile:file] [keycontainer:file] [/silent] [/verbose] [/nologo] [/unsafe]
Mixing • Managed and unmanaged code in one executable • Seamless interoperation • Fine grained control • Problems with • Inheritance • Pointer
Migration • Two ways • Directly: step-by-step migration • Mixing managed and unmanaged code • Indirectly: build a wrapper (see interaction) • Make your code callable from the .NET Framework
Managed vs. unmanaged • Code • Unmanaged • compiler generates executable x86 code • Managed • 2-step-compilation (IL and JIT) • Data • Unmanaged • Layout by compiler, no garbage collection • Managed • Layout by CLR, garbage collection
ATL, MFC and .NET • MFC • MFC is not legacy • Rich client development • WinForms covers MFC GUI • ATL • New features, like • Security classes • Simple object creation • ATL Server • Web Applications and Web Services
Summary • First insight: Visual C++.NET • Managed Code • Managed Extensions for C++ • Migration and interoperation of managed and unmanaged code • Perspectives: • Not all code will be managed • MFC and ATL are not dead!