Utilisation de la syntaxe Pascal Objet ou RIDL

De RAD Studio
Aller à : navigation, rechercher

Remonter à Utilisation de l'éditeur de bibliothèques de types


La page Code de l'éditeur de bibliothèques de types affiche vos informations de type au format RIDL (Restricted Interface Definition Language). Le format ressemble à la syntaxe IDL de Microsoft. Toutefois, RIDL supporte seulement un sous-ensemble de IDL. Comme c'est généralement le cas pour les applications Delphi, les identificateurs des bibliothèques de types sont insensibles à la casse. Les identificateurs peuvent avoir jusqu'à 255 caractères et, pour une portabilité maximale, doivent commencer par une lettre ou un caractère de soulignement (_).

Spécifications des attributs

Les types déclarés dans un fichier RIDL peuvent contenir des attributs. Les spécifications d’attributs sont entourées de crochets droits et sont séparées par des virgules. Chaque spécification d'attribut est constituée d’un nom d'attribut suivi (le cas échéant) d’une valeur.

Le tableau suivant liste les noms d'attributs et leurs valeurs correspondantes :

Syntaxe des attributs

Nom d'attribut Exemple S'applique à

aggregatable

[aggregatable]

typeinfo

appobject

[appobject]

typeinfo d'une CoClasse

bindable

[bindable]

membres, sauf membres d'une CoClasse

control

[control]

bibliothèque de types, typeinfo

custom

[custom '{7B5687A1-F4E9-11D1-92A8-00C04F8C8FC4}' 0]

tout

default

[default]

membres d'une CoClasse

defaultbind

[defaultbind]

membres, sauf membres d'une CoClasse

defaultcollection

[defaultcollection]

membres, sauf membres d'une CoClasse

dispid

[dispid]

membres, sauf membres d'une CoClasse

displaybind

[displaybind]

membres, sauf membres d'une CoClasse

dllname

[dllname 'Helper.dll']

typeinfo d'un module

dual

[dual]

typeinfo d'une interface

helpfile

[helpfile 'c:\help\myhelp.chm'] [helpfile 'c:\help\myhelp.hlp']

bibliothèque de types

helpstringdll

[helpstringdll 'c:\help\myhelp.dll']

bibliothèque de types

helpcontext

[helpcontext 2005]

tout sauf membres et paramètres d'une CoClasse

helpstring

[helpstring 'payroll interface']

tout sauf membres et paramètres d'une CoClasse

helpstringcontext

[helpstringcontext $17]

tout sauf membres et paramètres d'une CoClasse

hidden

[hidden]

tout sauf paramètres

lcid

[lcid $324]

bibliothèque de types

licensed

[licensed]

bibliothèque de types, typeinfo d'une CoClasse

nonbrowsable

[nonbrowsable]

membres, sauf membres d'une CoClasse

nonextensible

[nonextensible]

typeinfo d'une interface

oleautomation

[oleautomation]

typeinfo d'une interface

predeclid

[predeclid]

typeinfo

propget

[propget]

membres, sauf membres d'une CoClasse

propput

[propput]

membres, sauf membres d'une CoClasse

propputref

[propputref]

membres, sauf membres d'une CoClasse

public

[public]

typeinfo d’un alias

readonly

[readonly]

membres, sauf membres d'une CoClasse

replaceable

[replaceable]

tout sauf membres et paramètres d'une CoClasse

requestedit

[requestedit]

membres, sauf membres d'une CoClasse

restricted

[restricted]

tout sauf paramètres

source

[source]

tous les membres

uidefault

[uidefault]

membres, sauf membres d'une CoClasse

usesgetlasterror

[usesgetlasterror]

membres, sauf membres d'une CoClasse

uuid

[uuid '{7B5687A1-F4E9-11D1-92A8-00C04F8C8FC4}' ]

bibliothèque de types, typeinfo (obligatoire)

vararg

[vararg]

membres, sauf membres d'une CoClasse

version

[version 1.1]

bibliothèque de types, typeinfo

Syntaxe d'interface

La syntaxe Delphi pour déclarer les informations de type d'une interface est de la forme :

interfacename = interface[(baseinterface)] [attributes]
functionlist
[propertymethodlist]
end;

Par exemple, le texte suivant déclare une interface avec deux méthodes et une propriété :

Interface1 = interface (IDispatch)
  [uuid '{7B5687A1-F4E9-11D1-92A8-00C04F8C8FC4}', version 1.0]
  function Calculate(optional seed:Integer=0): Integer;
  procedure Reset;
  procedure PutRange(Range: Integer) [propput, dispid $00000005]; stdcall;
  function GetRange: Integer;[propget, dispid $00000005]; stdcall;
end;

La syntaxe Microsoft IDL correspondante est :

[uuid '{5FD36EEF-70E5-11D1-AA62-00C04FB16F42}',version 1.0]
interface Interface1 :IDispatch
{
  long Calculate([in, optional, defaultvalue(0)] long seed);
  void Reset(void);
  [propput, id(0x00000005)] void _stdcall PutRange([in] long Value);
  [propput, id(0x00000005)] void _stdcall getRange([out, retval] long *Value);
};

Syntaxe d'interface dispatch

La syntaxe Delphi pour déclarer les informations de type d'une dispinterface est de la forme :

dispinterfacename = dispinterface [attributes]
functionlist
[propertylist]
end;

Par exemple, le texte suivant déclare une dispinterface avec les mêmes méthodes et la même propriété que l'interface précédente :

MyDispObj = dispinterface
[uuid '{5FD36EEF-70E5-11D1-AA62-00C04FB16F42}',
  version 1.0,
  helpstring 'dispatch interface for MyObj'
  function Calculate(seed:Integer): Integer [dispid 1];
  procedure Reset [dispid 2];
  property Range: Integer [dispid 3];
end;

La syntaxe Microsoft IDL correspondante est :

[uuid '{5FD36EEF-70E5-11D1-AA62-00C04FB16F42}',
  version 1.0,
  helpstring "dispatch interface for MyObj"
dispinterface Interface1
{
  methods:
    [id(1)] int Calculate([in] int seed);
    [id(2)] void Reset(void);
  properties:
    [id(3)] int Value;
};

Syntaxe de CoClasse

La syntaxe Delphi pour déclarer les informations de type d'une CoClasse est de la forme :

classname = coclass(interfacename[interfaceattributes], ...); [attributes];

Par exemple, le texte suivant déclare une coclasse pour l'interface IMyInt et la dispinterface DmyInt :

myapp = coclass(IMyInt [source], DMyInt);
[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
  version 1.0,
  helpstring 'A class',
  appobject]

La syntaxe Microsoft IDL correspondante est :

[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
  version 1.0,
  helpstring "A class",
  appobject]
coclass myapp
{
  methods:
  [source] interface IMyInt);
  dispinterface DMyInt;
};

Syntaxe d'énumération

La syntaxe Delphi pour déclarer les informations de type d'une énumération est de la forme :

enumname = ([attributes] enumlist);

Par exemple, le texte suivant déclare un type énuméré avec trois valeurs :

location = ([uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
         helpstring 'location of booth']
  Inside = 1 [helpstring 'Inside the pavillion'];
  Outside = 2 [helpstring 'Outside the pavillion'];
  Offsite = 3 [helpstring 'Not near the pavillion'];);

La syntaxe Microsoft IDL correspondante est :

[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
        helpstring "location of booth"]
typedef enum
{
  [helpstring "Inside the pavillion"] Inside = 1,
  [helpstring "Outside the pavillion"] Outside = 2,
  [helpstring "Not near the pavillion"] Offsite = 3
} location;

Syntaxe d'alias

La syntaxe Delphi pour déclarer les informations de type d'un alias est de la forme :

aliasname = basetype[attributes];

Par exemple, le texte suivant déclare DWORD comme un alias d'un entier :

DWORD = Integer [uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}'];

La syntaxe Microsoft IDL correspondante est :

[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}'] typedef long DWORD;

Syntaxe d'enregistrement

La syntaxe Delphi pour déclarer les informations de type d'un enregistrement est de la forme :

recordname = record [attributes] fieldlist end;

Par exemple, le texte suivant déclare un enregistrement :

Tasks = record [uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
                helpstring 'Task description']
  ID: Integer;
  StartDate: TDate;
  EndDate: TDate;
  Ownername: WideString;
  Subtasks: safearray of Integer;
end;

La syntaxe Microsoft IDL correspondante est :

[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
        helpstring "Task description"]
typedef struct
{
  long ID;
  DATE StartDate;
  DATE EndDate;
  BSTR Ownername;
  SAFEARRAY (int) Subtasks;
} Tasks;

Syntaxe d'union

La syntaxe Delphi pour déclarer les informations de type d'une union est de la forme :

unionname = record [attributes]
case Integer of
  0: field1;
  1: field2;
  ...
end;

Par exemple, le texte suivant déclare une union :

MyUnion = record [uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
                  helpstring "item description"]
case Integer of
  0: (Name: WideString);
  1: (ID: Integer);
  3: (Value: Double);
end;

La syntaxe Microsoft IDL correspondante est :

[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
        helpstring "item description"]
typedef union
{
  BSTR Name;
  long ID;
  double Value;
  } MyUnion;

Syntaxe de module

La syntaxe Delphi pour déclarer les informations de type d'un module est de la forme :

modulename = module constants entrypoints end;

Par exemple, le texte suivant déclare les informations de type d'un module :

MyModule = module [uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
                   dllname 'circle.dll']
  PI: Double = 3.14159;
  function area(radius: Double): Double [ entry 1 ]; stdcall;
  function circumference(radius: Double): Double [ entry 2 ]; stdcall;
end;

La syntaxe Microsoft IDL correspondante est :

[uuid '{2MD36ABF-90E3-11D1-AA75-02C04FB73F42}',
        dllname("circle.dll")]
module MyModule
{
  double PI = 3.14159;
  [entry(1)] double _stdcall area([in] double radius);
  [entry(2)] double _stdcall circumference([in] double radius);
};

Rubriques

Voir aussi