▄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 kürzer - 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: OEM (CP437) | 1
|
|