Überarbeitung der Matlab-DDE-Toolbox:
=====================================
Umstrukturierung der Datei-Aufteilung:
--------------------------------------
Für jede Funktion existiert (wie bisher) eine MSVC-Projektdatei mit einer
C++ Quelldatei die eine Funktion (mexFunction) exportiert.
Die Funktionen zur Parameterprüfung sind in testargs.c zusammengefaßt.
In der Datei ddelib.c sind die Funktionen zur Konvertierung der DDE-Daten zu
Matlab-Matrizen zusammengefaßt:
- CFTextStringReq: CF_TEXT-Format -> Text-Matrix
- CFTextReq: CF_TEXT-Format -> numerische Matrix
- FastDDEReq: XlTable-Format -> numerische Matrix
Die folgende Funktionen werden dabei intern benutzt:
- GetMatrixSize
- Str2Double
- Transpose
Zur Ausgabe von DDEML-Fehlermeldungen wurde die Funktion
- HandleDdeError
hinzugefügt.
Änderungen die alle bzw. mehrere DDE-Funktionen betreffen:
----------------------------------------------------------
Die Übergabeparameter werden jetzt der Reihe nach (von links nach rechts) auf
Gültigkeit überprüft.
Das Channel-Handle setzt sich aus hConv im Low-DWord und idInst im High-DWord
(zuvor vertauscht) zusammen.
Fehler bei Excel-Format-Parameter (war case-sensitive) beseitigt.
Zeiger- und DDE-Handle-Validierung nach mxCalloc bzw. DdeCreateStringHandle.
Die Funktionen CFTextStringReq, CFTextReq und FastDDEReq besitzen in ddeadv und
ddereq ähnliche Funktionalität. Sie wurden nach ddelib.c verlagert und
entsprechend modifiziert. Fehler bei großen Datenmengen wurden behoben.
Änderungen in ddeadv:
---------------------
DDE-Links werden von der DDEML verwaltet. Links zum gleichen Item mit
unterschiedlichem Format werden unterschieden.
So überschreiben "neue" Advise-Links mit gleichem Format bereits vorhandene,
auch wenn zwischen Hot und Warm gewechselt wird.
Deshalb wurde die Struktur DDEAdviseInfoField um das Element cbFormat erweitert
und in den Methoden der Klasse InfoField ein zusätzlicher Übergabeparameter
eingefügt.
Änderungen in ddepoke:
----------------------
Abschließende Null bei Text-Übertragung fehlte -> in Zeile 182 eigefügt.
Noch zu erledigen:
------------------
ddeinit:
- zusätzliche Aktionen bei XTYP_DISCONNECT
ddepoke:
- optimieren von FastDDEMem
ddeadv/ddereq:
- Beschränkung auf 8 K bei CFTextStringReq aufheben
allg.:
- globale Speicheranforderung falls mxCalloc fehlschlägt
oder
- mxCalloc durch LocalAlloc/LocalLock bzw. GlobalAlloc/GlobalLock ersetzen
Probleme:
---------
Absturz von Matlab nach ca. 375 Schleifendurchläufen am Wassermeßplatz
EA 16.02.1998
Schlussendlich
--------------
Eigentlich h„tte man dieses Teil effektiver mit CMEX.DLL und einer
weiteren dynamischen Linkbibliothek l”sen k”nnen.
Aber man wusste wohl damals nicht so recht wie.
Nun habe ich's nach Matlab5 (32bit) und (objektfreies) Delphi portiert;
so ist es viel krzer - und auáerdem mit einem einzigen MAKEFILE
auf dem laufenden haltbar.
Auch die berm„áige Zeilenl„nge dieses Quelltextes ist nervenaufreibend;
zu einer (weiteren) šberarbeitung werde ich es aber wohl nicht bringen.
P.S. Aber ich nehme mir mal vor, alles in ein Vrz. und mit einem
MAKEFILE hinzustellen, auch wenn's dann bei statischen Bibliotheken bleibt.
h#s 06.03.2001
Detected encoding: ANSI (CP1252) | 4
|
|