Introduction to the Microsoft .NET Framework for Delphi

Download Report

Transcript Introduction to the Microsoft .NET Framework for Delphi

Introduction to the
Microsoft .NET Framework for
Delphi Developers
Ray Konopka
Agenda
 Delphi and .NET
 What is the .NET Framework?
 .NET Framework Core Features
 Writing .NET Managed Code
 Programming in Delphi for .NET
2
Origins of .NET
 The .NET Framework was influenced by many
languages and frameworks
 But there is no question that it looks a lot like Delphi
and the VCL
3
Delphi or .NET?
 Single-inheritance Object Hierarchy
 Strongly Typed
 Formal concept of properties and events
 Consistent use of exceptions
 Reusable and extensible component model
 Formal notion of class interfaces
 Special DLLs containing metadata (RTTI) and code
 WinForms (VCL).
4
Migrating to .NET
 Shorter learning curve for Delphi developers

Already familiar with object-oriented programming

Well versed in component-oriented programming

Comfortable consuming and creating events

Already know the benefits of exceptions and how to
use them
 Do not have to throw away existing Delphi
development knowledge
 Delphi 8 provides a clear migration path to .NET.
5
What is the .NET Framework?
CIL
CLS
ASP.NET
JIT
CUBS
GAC
CLR
BDP
VES
RTL.NET
GC
FCL
ADO.NET
VCL.NET
TLA
6
What is the .NET Framework?
 Virtual Machine Execution System
 The Common Language Runtime (CLR)
 Language-Neutral Class Library
 The Framework Class Library (FCL)
 Successor to Win32 Application Programming Model
 Competitor to Java Platform
7
Common Language Runtime
 Serves as the execution engine for managed
applications

Activates objects

Performs security checks

Manages memory allocations and recovery

Executes code

etc.
8
Framework Class Library
 Object-oriented API for writing managed applications
 Defines more than 7,000 types

classes

interfaces

enumerations

delegates
9
.NET Framework Core Features
 Simplified & Consistent Programming Model
 Side-by-Side Execution and Versioning
 Simplified Deployment
 Multi-platform Support
 Programming Language Integration
 Garbage Collection
 Code Verification
 Consistent Error Handling
 Interoperability
10
Simplified Programming Model
 All operating system services accessed through
common object-oriented programming model

File Access

Data Access

Threading

Graphics

etc.
 The CLR removes many cumbersome concepts

Registry, GUIDs, IUnknown, HRESULTS,

etc.
11
Side-by-Side
Execution/Versions
 The CLR allows application components to be isolated
 The CLR will always load the components that were
used to be build and test the application.
 If an application runs after installation, it should
always run
 Multiple versions of an application component may be
installed on the same system
 DLL versioning issues (DLL Hell) are eliminated
12
Simplified Deployment
 Installing most .NET applications involves


Copying files to a directory
Adding a shortcut to Start menu, desktop, or Quick
Launch bar
 Registry access no longer needed

No more GUIDs, ProgIDs, ClassIDs, etc.
 To uninstall, just delete the files
13
Multi-Platform Support
 .NET source code compiled to Common
Intermediate Language (CIL) instead of
traditional CPU instructions

High-level CPU independent assembly language

~100 different instructions

Direct support for object types, exceptions, etc.
 DCCIL compiles Delphi source code into CIL
14
Multi-Platform Support
 At runtime, the CLR translates the CIL into native
CPU instructions

Resulting CPU instructions are optimized for the host
processor
 A .NET application can be deployed to any machine
that has an ECMA-compliant version of the CLR and
FCL

e.g. x86, IA64, Pocket PC, Linux (via Mono), etc.
15
Language Interoperability
 The CLR allows different programming languages to
share types
 The CLR provides a Common Type System (CTS)



Describes how types are defined and how they behave
Specifies the rules for type visibility and members
access
Single inheritance - System.Object
 Common Language Specification (CLS)

Defines the minimum set of features that all .NET
languages that target the CLR must support
16
CLR/CTS & CLS Relationship
 Each language supports

A subset of the CLR/CTS

A superset of the CLS
CLR/CTS
C#
Delphi
CLS
Others
17
Garbage Collection
 The CLR automatically tracks all references to
memory
 When a block of memory no longer has any “live”
references to it, it can be released and reused
(collected)
 Impact – No deterministic destruction of objects
 IDisposable for releasing resources
 GC in the CLR covered in detail in February 2004
issue of The Delphi Magazine by Julian Bucknall.
18
Garbage Collection and Delphi
 Destructors in Delphi source code are translated into
IDisposable pattern
 Free is still available in Delphi 8
 Programming pattern for reference types same as
before—use Free when finished.
begin
List := TStringList.Create;
try
. . .
finally
List.Free; // Calls Dispose if implemented
end;
19
Code Verification
 The CLR can verify that all your code is type-safe
 The CLR ensures that allocated objects are always
accessed appropriately

Correct number of parameters

Correct types of parameters

No inappropriate memory access

etc.
 The CLR also ensures that execution flow will only
transfer to well-known locations

Method entry points
20
Consistent Error Handling
 Traditional Win32 programming incorporates many
different error handling mechanisms

Status Codes

GetLastError

HRESULTS

Structured Exceptions
 In the CLR, all failures are reported via Exceptions
 Exceptions work across module and programming
language boundaries

An exception raised in a Delphi class can be handled in
a VB.NET exception handler
21
Interoperability
 The .NET Framework supports interoperability with
existing code and components
 Managed code can call an unmanaged function in a
DLL

P/Invoke – Platform Invoke
 Managed code can use an existing COM component
(server)

Managed assembly created from type library
 Unmanaged code can use a managed type (server)

TlbExp.exe – Assembly to Type Library Converter

RegAsm.exe – Assembly Registration Utility
22
Writing .NET Managed Code
 Managed Modules
 Assemblies
 Namespaces
 Manifests
 AppDomains
 Safe Code vs. Unsafe Code
23
Managed Modules
 An executable designed to be run by the CLR
 Typically has EXE, DLL, or NETMODULE extension
 Contains




Windows Portable Executable (PE) File Header
A CLR header
Metadata describing contents and external
dependencies
CIL instructions generated from source code
 However, the CLR cannot execute a managed module
directly

Must be part of an assembly
24
Assemblies
 Logical grouping of one or more modules or files
 Smallest unit of reuse, security, and versioning
 Assemblies can be created

Directly by compiler (e.g. DCCIL.exe, CSC.exe, VBC.exe)

By combining existing modules using AL.exe (assembly linker)
 Satellite Assemblies

Contain resource data (strings, icons, etc.)

Loaded at runtime based on user locale
 Note: The CLR loader considers a .NET executable is an
assembly
25
Assemblies and Delphi
 Very similar to Packages in Delphi
 In fact, you create assemblies using the Delphi
package syntax
 requires clause lists dependent assemblies
(including .NET Framework assemblies)
 contains clause lists units to be included
 Example

RayKonopka.BorCon2004.Samples.dpk
26
Namespaces
 A namespace is a logical container for types
 Designed to eliminate name collisions
 Namespaces do not have any physical manifestation

Unlike Java, they do not map onto a directory structure
 An assembly can contribute to multiple namespaces
 Multiple assemblies can contributed to a namespace
 Examples

System.Drawing

System.Windows.Forms
27
Namespaces in Delphi
 A Delphi project (program, library, or package)
implicitly introduces its own namespace called the
project default namespace.
 A unit may explicitly declare itself to be part of a
namespace in the unit header

unit RayKonopka.Common.StringUtils;

Namespace = RayKonopka.Common.StringUtils
 A generic unit automatically becomes part of the
project default namespace

unit RkStringUtils;

Namespace = RayKonopka.BorCon2004.RkStringUtils
28
Multi-unit Namespaces
 One of the criticisms of Delphi 8’s support of
namespaces is that multiple units cannot belong to
the same namespace
 This is no longer an issue with Diamondback—the
next version of Delphi.
29
Manifests
 An XML description of the contents and external
dependencies of a managed module
 A manifest specifies the exact version of a module
that should be loaded to satisfy an external reference
 Internal - Manifest can be embedded as resource
 External - Manifest file can be placed in same
directory as executable. Must have same base
filename as module.

RayKonopka.Controls.dll.manifest
30
AppDomains
 An Application Domain is a context in which one or
more assemblies may be loaded
 An AppDomain is the smallest granularity of code
disposal


You cannot unload an assembly
You can unload an AppDomain, which will dispose of
all the assemblies loaded into it
 By default, every managed executable will run in its
own, separate process that has just one AppDomain
 However, the CLR supports loading multiple
AppDomains into a single process
31
AppDomain Boundaries
 Objects in one domain cannot be accessed by code in
another domain
 Data passed between domains must be marshaled
across the domain boundary
32
Safe vs. Unsafe Code
 Managed code DOES NOT mean safe code
 Safe code is code that is verifiably safe

PEVerify.exe
 Safe code

does not improperly access memory

does not call methods with inappropriate parameters

cannot adversely affect another application’s code

etc.
 Code that cannot be verified is considered unsafe

Call external APIs (external to .NET)

Using pointers and other unsafe types
33
Unsafe Types in Delphi
 Data types that work with pointers in some way are
considered unsafe

PChar

Untyped Pointers

file of <type>

Variant Records

Untyped out and ref parameters

Real48 (i.e. 6 byte floating point numbers)
34
Unsafe Code in Delphi
 Unsafe code accesses or works directly with memory
and cannot be verified to be safe

BlockRead

BlockWrite

Addr

Ptr

Absolute
35
Unsafe Typecasts in Delphi
 An unsafe typecast occurs when you cast an object
to a type that is not an ancestor or descendant of the
object instance
var
NumList: TStringList;
procedure AddNumber(Caption: string; Value: Integer);
begin
NumList.AddObject( Caption, TObject( Value ) );
end;
36
Additional Sessions
 1178 - Introduction to .NET FCL – Corbin Dunn

Monday, 2:00 pm to 3:15 pm

Wednesday, 11:00 am to 12:15 pm
 3228 – Custom .NET Controls – Ray Konopka

Monday, 5:00 pm to 6:15 pm
37
References
 Delphi for .NET Developers Guide

Xavier Pacheco
 Microsoft Development Network (MSDN)
 Applied .NET Framework Development

Jeffrey Richter
 Programming Microsoft .NET

Jeff Prosise
 .NET Reflector by Lutz Roeder

http://www.aisto.com/roeder/dotnet
38
The Finish Line
 Contact Information
Ray Konopka
[email protected]
http://www.raize.com
 Evaluation Forms
 Questions & Answers
39