This document covers the following topics:
Type information is a means to completely describe a class along with all of its interfaces, down to the names and types of the methods. It contains the necessary information about classes and their interfaces, for example, which interfaces exist on which classes, which member functions exist in those interfaces, and which argument those functions require.
This information is used by clients to find out details about a class and its methods, for example, by type-information browsers to present available objects, interfaces, methods and properties to an end user.
Another important area for using type information is the widely-used OLE automation technique which is also used by NaturalX.
There are several ways to store type information. A common way is generating the type information in type library (.TLB) files.
For each Natural class, a type library file is created when the class is registered.
The type library is generated in the $NATDIR/$NATVERS/etc/<serverid>/<classname>/<version> directory and connected to the class via an entry in the registry.
The name of the class module is used, and the .tlb extension is appended unless the type library file name conflicts with an existing name. Then a number is attached to the class module name.
Each interface defined in a Natural class is seen by clients as a
dynamic interface (also called a "dispatch interface"). Each
method of an interface is seen by clients under the name defined in the
METHOD
statement.
The first interface in a Natural class is marked as the default dispatch interface.
The support of type information also makes it possible to define multiple interfaces with identical method/property names. The Natural client simply addresses the corresponding method by using the interface name (as defined in the Natural class) as the prefix of the method name, as shown in the following example:
CREATE OBJECT #O3 OF CLASS "DepartmentList" SEND "Iterate.PositionTo" TO #O3 WITH "C" RETURN #DEPT
Natural clients use type information to find out to which interface a method or property belongs.
Note:
Natural clients do not use type information at catalog time to
perform syntax checks.
The following topics are covered below:
In order to receive data from clients or to pass data to classes
written in different programming languages, the Natural data formats are
converted to so-called OLE Automation-compatible types. This table shows how
COM clients see the method parameters or properties of a Natural class. For
example, if a Natural class has a method parameter or a property with the
format A, this is seen by a COM client as VT_BSTR
.
Natural Data Format | Automation-Compatible Type |
---|---|
A | VT_BSTR |
B1 | VT_UI1 |
B2 | VT_UI2 |
B4 | VT_UI4 |
Bn (n != 1, 2, 4) | SAFEARRAY of VT_UI1 |
C | not supported |
D | VT_DATE |
F4 | VT_R4 |
F8 | VT_R8 |
I1 | VT_I2 |
I2 | VT_I2 |
I4 | VT_I4 |
HANDLE OF GUI | not supported |
HANDLE OF OBJECT | VT_DISPATCH |
L | VT_BOOL |
N15.4 | VT_CY |
Nn.m (n.m != 15.4) | VT_R8 |
P15.4 | VT_CY |
Pn.m (n.m != 15.4) | VT_R8 |
T | VT_DATE |
U | VT_BSTR |
An array of a given Natural data format is mapped to a
SAFEARRAY
of the corresponding VT
type.
There are, however, some special cases:
A variable of format Bn with fixed
length, where n is not 1, 2 or 4, or an array of
such a variable, is mapped to a one-dimensional SAFEARRAY
of
VT_UI1
. This is for compatibility with previous versions of
Natural, where large and dynamic variables were not yet supported. Therefore,
large binary variables had to be simulated by arrays of variables of type B
with fixed length.
A dynamic variable of format B is mapped to a one-dimensional
SAFEARRAY
of VT_UI1
.
An array of dynamic variables of format B is mapped to a
SAFEARRAY
of variants, each containing a one-dimensional
SAFEARRAY
of VT_UI1
.
Attribute control variables are not mapped. They have no meaning
outside of Natural. Variables of format HANDLE OF GUI
are also not
mapped. There is no corresponding Automation-compatible type. Therefore
properties of the formats Attribute control variable or HANDLE OF
GUI
cannot be accessed by clients through COM/DCOM. Method parameters of
these types should be marked as optional in the parameter data area, so that
clients can omit the parameters when calling the method through COM/DCOM.
This table shows how parameters or properties of an external class
can be addressed by Natural. For example, if an external class has a method
parameter or property with type VT_R4
, this parameter or property
can be addressed in Natural as F4 or with a format that is
MOVE
-compatible to F4.
Automation -Compatible Type | Natural Data Format |
---|---|
VT_BOOL |
L |
VT_BSTR |
A or U |
VT_CY |
P15.4 |
VT_DATE |
T |
VT_DISPATCH |
HANDLE OF OBJECT |
VT_UNKNOWN |
HANDLE OF OBJECT |
VT_I1 |
I1 |
VT_I2 |
I2 |
VT_I4 |
I4 |
VT_INT |
I4 |
VT_R4 |
F4 |
VT_R8 |
F8 |
VT_U1 |
B1 |
VT_U2 |
B2 |
VT_U4 |
B4 |
VT_UINT |
B4 |
A SAFEARRAY
of up to three dimensions is converted into
a Natural array with the same dimension count and the corresponding format.
SAFEARRAY
s with more than three dimensions cannot be used from
within Natural.
There are, however, some special cases:
A VT_BSTR
maps either to a Natural variable of format
A or to a one-dimensional array of Natural variables of format A with fixed
length. The additional dimension is then used to store strings longer than 253
characters. This is for compatibility with previous versions of Natural, where
large and dynamic variables were not yet supported. This mapping should no
longer be used. Instead, a dynamic variable of format A should be used.
A SAFEARRAY
of VT_BSTR
s maps either to an
array of Natural variables of format A with the same dimension count, or to an
array of Natural variables of format A with fixed length with one more
dimension. The additional dimension is then used to store strings longer than
253 characters. This is for compatibility with previous versions of Natural,
where large and dynamic variables were not yet supported. This mapping should
no longer be used. Instead an array of dynamic variables of format A should be
used.
A SAFEARRAY
of VT_UI1
can be mapped to an
array of Natural variables of format B with fixed length that has a matching
total size. This is for compatibility with previous versions of Natural, where
large and dynamic variables were not yet supported. This mapping should no
longer be used. Instead a dynamic variable of format B should be used.