DLL-Funktion: Eigene Funktionen aus DLL aufrufen
Das Kommando ermöglicht es, eigene Funktionen zur Erzeugung neuer Knoten und Elemente aufzurufen. Die Funktionen müssen in einer oder mehreren DLLs zur Verfügung gestellt werden.
Nach Eingabe des Kommandos erscheint das dargestellte Dialogfenster mit folgenden Optionen:
DLL Datei
Neue Datei laden: Wird der Button angeklickt, so erscheint ein Dateiwahlfenster in dem die DLL-Datei auszuwählen ist, die geladen werden soll.
DLL entfernen: In der aufklappbaren Liste werden die Namen aller DLLs angezeigt, die geladen sind. Wird der Button angeklickt, so wird die in dem Eingabefeld angezeigte DLL entfernt.
DLL-Funktionen
Funktion aufrufen: Wird der Button angeklickt, so wird die Funktion aufgerufen, deren Name in dem Eingabefeld angegeben ist. Beim erstmaligen Aufruf der Funktion muß zuvor in der Liste der DLL-Namen die DLL selektiert werden, in der die Funktion enthalten ist. Wird die Funktion in der DLL gefunden, so wird deren Adresse gespeichert und der Funktionsname in der aufklappbaren Liste angezeigt. Die Funktion kann dann mehrfach aufgerufen werden, bis die zugehörige DLL entfernt wird.
Beim erstmaligen Aufruf des Kommandos wir geprüft, ob in dem bin Verzeichnis von MAKROS eine Datei „maka_interface.ini“ mit Einträgen des folgenden Typs existiert:
#dll kf funktion verzeichnis
„kf“ ist hierin die Typkennzahl der Funktion, „funktion“ der Name einer Funktion und „verzeichnis“ der Pfadname der DLL in der die Funktion enthalten ist.
Zum Beispiel:
#dll 0 funct1 G:\boege\makrosa\testdll\dll1\debug\dll1.dll
#dll 0 funct2 G:\boege\makrosa\testdll\dllmfc\debug\dllmfc.dll
#dll 1 testInterface G:\boege\makrosa\testdll\interf\debug\interface.dll
Werden entsprechende Einträge gefunden, so werden die darin angegebenen DLLs sofort geladen und die Einsprungstellen des Funktionen ermittelt und gespeichert. Die DLLs und Funktionsnamen werden in die entsprechenden Listen des Dialogfensters eingetragen und können nachfolgend aufgerufen werden.
Prototyp der aufgerufenen Funktionen
Die aufgerufenen Funktionen müssen den folgenden Prototyp aufweisen:
typedef
struct
{
int nev; // Anzahl Elemente
int nn1; // Dimension einer Elementzeile
int npv; // Anzahl Knoten
int **nel; //
Elemente nel [nev+1][nn1]
float (*pkt)[3]; //
Knotenkoordinaten
} festruct;
extern „C“
void funktion
(CWnd *pWnd, festruct *ein, festruct *aus,
int kzfree, int kzf, void *p);
pWnd ist ein Zeiger auf das Protokollfenster von MAKROS. Sofern die Funktion Dialoge verwendet, sollte pWnd als parent window verwendet werden.
ein ist die Adresse einer Struktur, in der die Elementbeschreibungen und Knotenkoordinaten aller Elemente der aktuell aktiven Struktur angegeben sind. Für jedes Element werden folgende Daten angegeben: externe Elementnummer, Typkennzahl des Elementes, mechanische Typkennzahl, Gruppennummer, interne Indizes der Elementknoten. Elemente und Knoten sind ab dem Index 1 in den Feldern nel bzw. pkt gespeichert.
aus ist die Adresse einer Struktur, in der neue Elemente zurückgegeben werden können. Die zugehörigen Parameter bzw. Adressen sind in der Struktur zu speichern. Zurückgegebene Elemente werden an die vorhandenen Elemente angefügt.
kzfree ist eine Kennzahl, die Funktion wird zunächst mit kzfree = 0 aufgerufen, danach werden evtl. zurückgegebene neue Elemente in die Struktur eingefügt und unmittelbar danach wird die Funktion erneut mit kzfree = 1 aufgerufen. Bei diesem zweiten Aufruf sollte lediglich der für neue Elemente reservierte Speicher wieder freigegeben werden.
kzf ist die Funktionstypkennzahl der Funktion und muß 0 sein bei diesem Funktionstyp.
p wird nicht verwendet bei diesem Funktionstyp.
In dem Verzeichnis dll sind zwei Musterbeispiele für eigene Funktion mit bzw. ohne Dialogfenster angegeben. Bei Bedarf kann die Programmierschnittstelle um weitere Funktionen mit anderem Prototyp erweitert werden.