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.