Delphi-LogoMacromedia-Logo

Delphi und Authorware


Verfasst: 14. April 96

Autorin: Dr. Silvia Rothen, rothen ecotronics, Bern, Schweiz
Letzte Überarbeitung: 13.05.18


Inhaltsverzeichnis

Einleitung
Delphi-DLL
Einbindung einer DLL in Authorware
Tips und Tricks
Literatur
Adressen


Einleitung

Authorware ist wie das bekanntere Toolbook ein visuelles Autorentool zur Erstellung von anspruchsvollen Multimediaproduktionen oder CBT-Anwendungen (Computer Based Training). Gegenüber Toolbook hat es den Vorteil, dass Cross-Plattform-Anwendungen für PC und Mac erstellt werden können, was sich der Hersteller Macromedia (Adresse siehe unten) mit einem äusserst stolzen Preis bezahlen lässt.
Da Authorware fast ausschliesslich mit visuellen Elementen, den Icons, arbeitet, sind die Möglichkeiten der Programmierung verglichen mit einer Entwicklungsumgebung wie Delphi oder Visual Basic ziemlich beschränkt. Da Programmcode mittels sogenannten Calculation-Icons an den verschiedensten Stellen der Flowline eingefügt wird, verliert man ausserdem rasch den Überblick. Glücklicherweise bietet Authorware die Möglichkeit, statt Authorware-Code zu schreiben, Funktionen aus externen DLLs zu verwenden. Einerseits können damit bestehende DLLs angezapft werden, falls man deren innere Struktur kennt (was leider oft nicht der Fall ist). Oft ist es sinnvoll, für diesen Zweck eine eigene DLL zu schreiben, beispielsweise mit Borlands Entwicklungsumgebung Delphi (Adresse siehe unten).
Der erste Teil des folgenden Textes zeigt, wie man ein Delphi-Projekt in eine DLL umwandelt. Im zweiten Teil zeige ich dann, wie die Funktionen der Delphi-DLL anschliessend in Authorware eingebunden werden. Als Beispiel dient ein kleines Delphiformular, mit dem nach dem Passwort gefragt wird.


Delphi-DLL

Die folgenden Konventionen bezüglich der Formatierung gelten für dieses und das nächste Kapitel:

Um ein normales Delphiprojekt in eine DLL umzuwandeln braucht es die folgenden 5 Änderungen in Projektdatei (dpr) und units (eine ausführliche Beschreibung findet sich im Handbuch Komponentenentwicklung, Delphi 1995, Seite 145 bis 149).
In der Projektdatei

  1. Im Programmnamen wird das reservierte Wort program durch das reservierte Wort library ersetzt
  2. Unter uses werden alle forms ausser jenen der zu exportierenden Funktionen entfernt
  3. Zwischen uses und begin ... end wird das reservierte Wort exports eingefügt und in den nächsten Zeilen die Namen der zu exportierenden Funktionen.
  4. Alle Zeilen zwischen begin und end im unteren Teil der Datei werden entfernt


Für unser Beispiel, bei dem als einzige Funktion GetPasswort exportiert wird, sieht der Code der Projektdatei folgendermassen aus:

library Pwenter;
uses
  Pwform in 'PWFORM.PAS' {Eingabeform};
exports
  GetPassword;

{$R *.RES}
begin
end.


In den Units:
Im Interface-Teil der unit wird der Funktionskopf der zu exportierenden Funktion eingefügt und nach dem Strichpunkt mit dem Wort export; ergänzt.
Bei den Funktionen muss man darauf achten, dass die Typen auf die Anwendung abgestimmt werden, mit der man die DLL aufrufen will. Der Type string ist beispielsweise spezifisch für Delphi und Pascal. Für andere Anwendungen wie Authorware oder C benutzt man deshalb stattdessen den Type PChar. Mehr zur Verträglichkeit von Authorware und Delphitypen findet sich im Abschnitt Typen

Der Code für unser Beispiel sieht so aus:

unit Pwform;
interface
uses
  SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
  Forms, Dialogs, StdCtrls, Buttons, ExtCtrls, Menus;
type
  TEingabeform = class(TForm)
    ....
  end;
var
  Eingabeform: TEingabeform;

function GetPassword(AName : PChar) : wordbool; export;

implementation
{$R *.DFM}
function GetPassword(AName : PChar) : wordbool;
begin
  .......
end;
end.


Nach diesen Änderungen wird bei der nächsten Compilierung automatisch die DLL "pwenter.dll" erzeugt.


Einbindung einer DLL in Authorware

Funktionen laden

Um Funktionen aus der DLL von Hand zu laden, geht man folgendermassen vor:

  1. Mit Data - Load Function erhält man die Dialogmaske für die Einbindung der DLL
  2. Unter filename wird der Name der Funktion eingegeben, in unserem Fall ist dies GetPassword.
  3. Unter arguments trägt man den Authorware-Type der Argumente ein, wobei man mehrere Argumente durch Kommas trennt. Im Beispiel übergeben wir nur einen String, also tragen wir string ein.
  4. Unter return trägt man den Authorware-Type des Rückgabewertes ein. Für das Beispiel ist dies short.
  5. Damit man auch später noch weiss, was diese Funktion tut, gibt man im Feld Description einen Kommentar ein.

Im Screenshot sieht man die korrekt ausgefüllte Maske für unsere Beispielfunktion GetPassword

Eingabeformular zur Einbindung von DLLs
Wird die Funktion erfolgreich geladen, dann kann sie anschliessend wie eine interne Funktion mit Data - Show Functions wie im Bild ersichtlich in calculation icons hineingepastet werden.

Authorware-Formular zum Laden von Funktionen

In unserem Beispiel könnte der entsprechende Authorware-Code etwa so aussehen:

vresult := getpassword("versuch")
if vresult then
  DisplayIcon(IconID@"Richtig")
else
  DisplayIcon(IconID@"Falsch")
end if

Typen

Damit das manuelle Laden von Funktionenauch klappt, muss man wissen, welche Delphi-Typen den Authorware- Typen entsprechen. Die folgende, nicht vollständige Tabelle listet dies für einige Typen auf:

Typen
Authorware Delphi Windows API
byte byte BYTE
char char -
double vmtl. double -
dword - DWORD
float vmtl. real -
long longint LONG
pointer ? LPRECT, LPPOINT
short integer, wordbool BOOL
string PChar, PStr LPCSTR, LPSTR
void ? ?
word word UINT, WORD
word THandle HWND

Tips und Tricks

Platzsparend programmieren

Wenn man gezwungen ist, möglichst platzsparend zu programmieren, beispielsweise weil die Endanwendung auf wenigen Disketten Platz haben muss, dann müssen alle externen Funktionen in eine einzige DLL gepackt werden. Jede Delphi-DLL belegt nämlich mindestens 100 KB. Kompressionsprogramme wie pkzip reduzieren dies um höchstens die Hälfte, während sich Authorware-Code, solange keine Grafiken enthalten sind, oft um über 80 % reduzieren lässt.

UCD

Um das Laden von Funktionen aus externen DLLs in Authorware-Projekte zu automatisieren, kann man UCDs (User Code Documents) dazwischenschalten. Nach dem Laden einer UCD lassen sich die darin enthaltenen Funktionen wie authorwareeigene Funktionen verwende. Im Handbuch "Using Authorware" findet sich eine Beschreibung auf Seite 610, und auf den Seiten 617 bis 622.
Leider beziehen sich alle Informationen, die ich bisher über die Erstellung von UCDs gefunden habe, auf die Sprache C++, die mir nicht zur Verfügung steht. Für alle Hinweise, ob es möglich ist, UCDs in Delphi zu erstellen und zu kompilieren, und wie man dabei vorgeht, bin ich deshalb äusserst dankbar (rothen_s@bluewin.ch)


Literatur

Delphi 1995: Handbuch Komponentenentwicklung. Borland Delphi für Windows. Version 1.0, Borland International, Scotts Valley, CA (Teil der offiziellen Handbücher) 
Macromedia 1995: Using Authorware. Version 3, Macromedia Inc., San Francisco, CA (Teil der offiziellen Handbücher)


Adressen

Macromedia: http://www.macromedia.com
Borland: http://www.borland.com


Diese Webseite wurde am 21.05.18 um 17:10 von rothen ecotronics erstellt oder überarbeitet.

Impressum

Zurück zu rothen ecotronics

Printed on 100% recycled electrons!