3.5 DM_BindFunctions

Nach dem Laden des Dialogs kann mit Hilfe dieser Funktion dem DM eine Tabelle von Funktionen übergeben werden. Diese Funktion ist von der Arbeitsweise her sehr ähnlich zu der Funktion DM_BindCallBacks, jedoch mit dem Unterschied, dass diese Funktion benutzt werden muss, wenn der zugehörige Dialog modular aufgebaut ist und Funktionen in Modulen definiert worden sind.

Mit Hilfe dieser Funktionen können Funktionen, die in noch nicht geladenen Modulen definiert sind, an den Dialog gebunden werden, so dass nach dem Laden des Moduls diese Funktionen sofort aufgerufen werden können.

DM_Boolean DML_default DM_EXPORT DM_BindFunctions
(
  DM_FuncMap funcmap,
  DM_UInt funccount,
  DM_ID objID,
  DM_ID moduleID,
  DM_Options options
)

Parameter

-> DM_FuncMap funcmap

Dieser Parameter ist die Tabelle der Funktionen, die direkt vom DM aus aufgerufen werden können. Der Aufbau dieser Tabelle ist im Kapitel über die Datenstrukturen beschrieben. Diese Tabelle kann über die Option +writefuncmap automatisch vom Simulationsprogramm generiert werden.

-> DM_UInt funccount

Dieser Parameter gibt die Größe der übergebenen Funktionstabelle an.

-> DM_ID objID

Dieser Parameter ist die ID des Objektes, an das diese Tabelle gebunden werden soll. Diese ID kann entweder ein Dialog, ein Modul oder eine Applikation sein.

-> DM_ID moduleID

Dieser Parameter ist die ID des Moduls, das seine Funktionen sofort aus dieser Tabelle versorgen soll. Diese ID muss nur dann angegeben werden, wenn ein Modul nachgeladen worden ist und dann erst die Funktionen an die übergeordnete Instanz gebunden werden. Im Normalfall ist hier also die ID 0 anzugeben.

-> DM_Options options

Hier sind zur Zeit folgende Werte möglich:

Option

Bedeutung

DMF_ReplaceFunctions

Diese Option bedeutet, dass eine vielleicht vorhandene Funktionstabelle bei dem angegebenen Objekt komplett durch die neue Tabelle ersetzt werden soll. Ist diese Option nicht angegeben, so wird die neue Tabelle am Ende einer bestehenden Tabelle des Objekts angefügt.

Beispiel

Aus einem Modul wird über die Option +writefuncmap (siehe auch Kapitel „Startoptionen im Simulationsprogramm“ im Handbuch „Entwicklungsumgebung“) eine C-Datei generiert. Dabei hat die Dialogdatei folgendes Aussehen:

module ModFuncDate

 

application TimeServer

{

  !! Get the current date from the server to synchronize the

  !! clients

  !! example: CurrentDate( Year, Month, Day) returns true

  !! if successful and fills the three variables with the

  !! appropriate values

  function boolean CurrenDate( integer Year output,

    integer Month output, integer Day output);

 

  !! Get the current time, see function CurrentDate

  function boolean CurrentTime( integer Hour output,

    integer Minute output, integer Second output);

}

Das generierte C-Programm sieht wie folgt aus:

#include "IDMuser.h"

#include "dateappl.h"

 

#define FuncCount_TimeServer (sizeof(FuncMap_TimeServer) / sizeof(FuncMap_TimeServer[0]))

 

static DM_FuncMap FuncMap_TimeServer[] =

{

/*

**  Get the current date from the server to synchronize the

**  clients

**  example: CurrentDate( Year, Month, Day) returns true

**  if successful and fills the three variables with the

**  appropriate values

*/

  { "CurrenDate", (DM_EntryFunc) CurrenDate },

/*

**  Get the current time, see function CurrentDate

*/

  { "CurrentTime", (DM_EntryFunc) CurrentTime },

}

 

DM_Boolean DML_default BindFunctions_TimeServer __3(

    (DM_ID, dialogID),

    (DM_ID, moduleID),

    (DM_Options, options))

{

return (DM_BindFunctions (FuncMap_TimeServer,

    FuncCount_TimeServer,dialogID,moduleID,options))

}