Types Defined Differently

From RAD Studio
Jump to: navigation, search

Go Up to Support for Delphi Data Types and Language Concepts

Types that are defined differently in Delphi and C++ are not normally cause for concern. The rare cases in which they are problematic may be subtle. For this reason, these types are mentioned in this section.

Boolean data types

The True value for the Delphi ByteBool, WordBool, and LongBool data types is represented in Delphi as –1. False is represented as 0.

Note: The Boolean data type remains unchanged (True = 1, False = 0).

While the C++ bool type converts these Delphi types correctly, there is a problem when sharing a WinAPI function or any other function that uses a Window’s BOOL type, which is represented as 1. If a value is passed to a parameter of type BOOL, it evaluates to –1 in Delphi and to 1 in C++. Therefore, if you are sharing code between these two languages, any comparison of the two identifiers may fail unless they are both 0 ( False, false). As a workaround, you can use the following method of comparison:

 !A == !B;

The following table shows the results of using this method of equality comparison:

Equality comparison !A == !B of BOOL variables

Delphi C++ !A == !B

0 (False)

0 (false)

!0 == !0 (TRUE)

0 (False)

1 (true)

!0 == !1 (FALSE)

-1 (True)

0 (false)

!-1 == !0 (FALSE)

-1 (True)

1 (true)

!-1 == !1 (TRUE)

With this method of comparison, any set of values will evaluate correctly.

Char data types

The char type in C++ is a signed type, whereas it is an unsigned type in Delphi. It is extremely rare that a situation would occur in which this difference would be a problem when sharing code.