1 / 35

Managed C++

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

taurus
Télécharger la présentation

Managed C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Managed C++

  2. 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

  3. 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

  4. Section 1: Overview • Looking back • Managed Execution

  5. Looking back • Object-oriented programming • COM+ • Most successful component model in history • Only viable commercial component platform • Enables cross-organization integration and reuse

  6. 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

  7. 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

  8. Managed Execution SourceCode IL &Metadata Compiler Common Language Runtime (incl. CTS and CLS) ClassLib Class Loader JIT Compiler ManagednativeCode Execution

  9. Section 2: New features in VC++.NET • Visual C++.NET • Compiler options • Linker options • New Keywords and types • Managed Extensions

  10. 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

  11. Managed Extensions • C++ language extensions • Access to the .NET Framework Unmanaged classes Managed classes COM Interop PInvoke MFC / ATL .NET WIN32 API

  12. 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

  13. /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;

  14. 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

  15. 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, ...

  16. Section 3: Managed Extensions • Language interoperability • Managed code • Garbage Collection • Exception Handling

  17. 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];

  18. 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

  19. 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

  20. 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

  21. GC and your destructor • Destructor ? • Managed objects never have destructors • Finalization ! • ... is called automatically • Close and Dispose • Control over clean-up

  22. __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 !

  23. 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

  24. Section 4: Applications w/ VC++.NET • Use cases • Migration • MFC, ATL, and .NET • Managed vs. unmanaged

  25. 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

  26. Interaction I • Accessing .NET Framework from unmanaged code .NET Framework Unmanaged world Managed Extensions CCW

  27. 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]

  28. Interaction II • Accessing a C++ object from the .NET Framework .NET Framework Unmanaged world RCW

  29. 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]

  30. Mixing • Managed and unmanaged code in one executable • Seamless interoperation • Fine grained control • Problems with • Inheritance • Pointer

  31. 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

  32. 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

  33. 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

  34. 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!

  35. Questions

More Related