community.borland.com

Article #16135: New Language Features in Delphi 2.0

 Technical Information Database

TI1135D.txt - New Language Features in Delphi 2.0

Category   :Delphi 2.x
Platform   :All Windows
Product    :Delphi2.x,   

Description:
New Language Features in Delphi 2.0 - 32

Delphi 2.0 defines several new data types that exploit the 
features available by Windows 95.  Delphi 2.0 has also changed 
a few data types to take advantage of the 32-bit environment.  

New data types include:

   Character type
   String type
   Variant type
   Currency type

Changed data types:

   Integer
   Cardinal

Additional Syntax:

   Unit finalization section
 	

New Data Types
--- ---- -----

Character Type

Delphi 2.0 introduces new wide character types to support 
Unicode.  Delphi 1.0 treated characters as 8-bit values of type 
Char.

These are the standard types that represent characters in 
Delphi 2.0.

   ANSIChar - A standard 8-bit ANSI character, equivalent to the 
              Char type in previous versions of Delphi.

   WideChar - A 16-bit character, representing a Unicode 
              character.  If the high-order byte is zero, the 
	      low-order byte contains an ANSI character.

       Char - By default, Char is equivalent to ANSIChar.  Char 
              works in the same way as the 
	      implementation-dependent Integer type, which is 
              equivalent to SmallInt in 16-bit versions of Delphi 
	      and to LongInt in 32-bit versions of Delphi.  In 
              Delphi 2.0, Char defaults to an 8-bit value.  

Character-pointer types:

              Pointer type	Character type
              -----------------------------------
              PANSIChar		ANSIChar
	      PWideChar		WideChar
              PChar		Char

	      The semantics of all the character-pointer types 
              are identical.  The only thing that varies is the 
              size of the character pointed to.

String Type

Delphi 2.0 supports strings of nearly unlimited length in 
addition to the 255-character counted strings previously 
supported.  A new compiler directive, $H, controls whether the 
reserved word "string" represents a short string or the new, 
long string.  The default state of $H, is $H+, using long 
strings by default.  All Delphi 2.0 components use the new long
string type.

These are the new string types.

   ShortString - A counted string with a maximum length of 255
                 characters.  Equivalent to String in 
                 Delphi 1.0. Each element is of type ANSIChar.
    AnsiString - A new-style string of variable length, also 
		 called a "long string."  Each element is of 
		 type ANSIChar.
        string - Either a short string or an ANSI string, 
                 depending on the value of the $H compiler 
		 directive.


Here are the compatibility issues.

Although most string code works interchangeably between short 
strings and long strings, there are certain short-string 
operations that either won't work on long strings at all or 
which operate more efficiently when done a different way.  The 
following table summarizes these changes.

Short String 	Long string
operation	equivalent	  Explanation
----------------------------------------------------------------
PString type	string	          All long strings are 
                                  dynamically allocated, so 
                                  PString is redundant and 
				  requires more bookkeeping.	
S[0] := L	SetLength(S,L)    Because long strings are 
                SetString(S,P,L)  dynamically allocated, you  
				  must call the SetLength  
				  procedure to allocate the  
                                  appropriate amount of memory.
StrPCopy        StrPCopy(Buffer,
(Buffer, S)	PChar(S))	  You can typecast long strings 
				  into null-terminated strings. 
				  The  address of the long  
				  string is the address of its  
				  first character, and the long  
                                  string is followed by a null.
S := StrPas(P)	S := P	          Long strings can automatically  
                                  copy from null-terminated 
				  strings.

Long strings cannot be passed to OpenString-type parameters or 
var short-string parameters.

Variant Type

Delphi 2.0 introduces variant types to give you the flexibility
to dynamically change the type of a variable. This is useful 
when implementing OLE automation or certain kinds of database 
operations where the parameter types on the server are unknown 
to your Delphi-built client application.

A variant type is a 16-byte structure that has type 
information embedded in it along with its value, which can 
represent a string, integer, or floating-point value. The 
compiler recognizes the standard type identifier Variant as the 
declaration of a variant.

In cases where the type of a variant is incompatible with the 
type needed to complete an operation, the variant will 
automatically promote its value to a compatible value, if 
possible. For instance, if a variant contains an integer and 
you assign it to a string, the variant converts its value into 
the string representing the integer number, which is then 
assigned to the string.

You can also assign a variant expression to a variable of a 
standard type or pass the variant as a parameter to a routine 
that expects a standard type as a parameter. Delphi coerces the 
variant value into a compatible type if necessary, and raises 
an exception if it cannot create a compatible value.

Currency Type

Delphi 2.0 defines a new type called Currency, which is a 
floating-point type specifically designed to handle large 
values with great precision. Currency is assignment-compatible 
with all other floating-point types (and variant types), but 
is actually stored in a 64-bit integer value much like the Comp 
type.

Currency-type values have a four-decimal-place precision. That 
is, the floating-point value is stored in the integer format 
with the four least significant digits implicitly representing 
four decimal places.


Changed Data Types
------- ---- -----
The implementation-dependent types Integer and Cardinal are 
32-bit values in Delphi 2.0, where they were 16-bit values in 
Delphi 1.0. To explicitly declare 16-bit integer data types, 
use the SmallInt and Word types.

Additional Syntax
---------- ------
You can include an optional finalization section in a unit. 
Finalization is the counterpart of initialization, and takes 
place when the application shuts down. You can think of the 
finalization section as "exit code" for a unit. The 
finalization section corresponds to calls to ExitProc and 
AddExitProc in Delphi 1.0.

The finalization begins with the reserved word finalization. 
The finalization section must appear after the initialization 
section, but before the final end. statement.

Once execution enters an initialization section of a unit, 
the corresponding finalization section is guaranteed to 
execute when the application shuts down. Finalization sections 
must handle partially-initialized data properly, just as class 
destructors must.

Finalization sections execute in the opposite order that units 
were initialized. For example, if your application initializes 
units A, B, and C, in that order, it will finalize them in the 
order C, B, and A.

The outline for a unit therefore looks like this:

unit UnitName;
interface
{ uses clause; optional }
...
implementation
{ uses clause; optional }
...
initialization { optional }
...
finalization { optional }
...
end.


Reference:
 

3/30/99 1:01:56 PM
 

Last Modified: 01-SEP-99