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 <install-dir>/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.