unit dde_init;
{Interface fr exportierte DDEINIT-Routinen, zur Benutzung durch
alle anderen DDE-DLLs}
interface
uses PasMex32,Windows,DDEML;
const
StdTimeOut=3000; {3 Sekunden TimeOut fr alles}
MaxAdvItems=16;
{$Z4}
type
EClip=(Text,Unicode,XlTable,MatTable);
PHSZ=^HSZ;
function GetInst:DWord; stdcall;
{ID-Spender fr die anderen Funktionen}
procedure HandleDdeError(DdeError:UInt); stdcall;
{Bei DDE-Fehler Warnmeldung (kein Skript-Abbruch!);
DdeError darf auch 0 sein; dann wird DdeGetLastError herangezogen}
function TestInputArgs(nrhs:LongInt; const prhs: TMatArr;
minIn,maxIn:LongInt; permitString,permitNumeric: DWord):Boolean; stdcall;
{Testet Rechte-Hand-Parameter auf Anzahl (Minimum und Maximum)
und auf Typ via zweier Bitmasken (so sind auch zwei Typen erlaubt)
Liefert immer TRUE, weil bei Fehler Skript-Abbruch}
function ArrayToStringHandle(a:PArray):Hsz; stdcall;
{Umwandlung Matlab-String-Matrix in DDE-String-Handle}
function ArrayToStringHandles(a:PArray;szp:PHSZ;szplen:Integer):Integer;
stdcall;
{Umwandlung Matlab-String-Matrix in DDE-String-Handle-Array}
function FreeStringHandle(sz:HSZ):Boolean; stdcall;
{ein oder mehrere String-Handles freigeben und Referenzen nullsetzen}
function CheckClipFormat(a:PArray; var cf:UInt; ocp:PBool):EClip; stdcall;
{Testet auf CF_Text(=1) oder CF_XlTable oder CF_MatTable
und liefert 1, 2 oder 3; bei Fehler keine Rckkehr
Verarbeitet sowohl Zahlen als auch (neu) Konstanten-Strings
Bei Angabe des Parameters ocp wird auf Zwei-Element-Array getestet,
fr DDEREQ und DDEADV, und so der Rckgabe-Typ ermittelt}
procedure PutErr(strcode:UInt); stdcall;
{einfache Fehlermeldung}
procedure PutWarn(strcode:UInt); stdcall;
{einfache Warnung fr die anderen DLLs}
function MyRegisterClipboardFormat(FormatName:PChar):UInt; stdcall;
{wie die Windows-Funktion, jedoch mit Verarbeitung von "Text" und
"UnicodeText" als vordefinierte Codes}
const
NumberLength=26; {L„nge eines DOUBLE in Zeichen, volle Pr„zision}
function Alloc_Datalen(format:EClip; x,y:LongInt; var datalen: UInt):PChar;
stdcall;
{Berechnet die ben”tigte Menge an Speicherplatz fr die angegebenen
Dimensionen und fordert ihn an. Nur fr max. zweidimensionales!
Liefert nie NIL; bricht ggf. mit mexErrMsgTxt() ab.
Speicher ist mit Nullen gefllt}
procedure str_count_numbers(s:PChar; var x,y:LongInt); stdcall;
{Z„hlt Zeilen (y) und Spalten (x) der Text-Matrix ab, nimmt dabei
das Maximum, falls einige Zeilen nicht voll sind. Trennt Spalten
an Leerzeichen, Tabs und am Windows-Listentrenner? (Systemsteuerung).
Leerzeilen werden ignoriert. X mindestens 1, aber Y kann Null werden!}
procedure str_to_numbers(s:PChar; x,y:LongInt; dp:PDouble;
skipxl:Bool); stdcall;
{wandelt durchgez„hlten Text in Doubles um}
procedure str_from_numbers(s:PChar; x,y:LongInt; dp:PDouble;
skipxl:Bool); stdcall;
{wandelt Doubles in Text um}
procedure PrepareXlTable(var dp:PDouble; x,y: LongInt); stdcall;
{Fllt den bereits ausgenullten Speicher mit dem Header und den
Zwischen-Headern, setzt dp hinter den Haupt-Header}
function SkipXlFloatHeader(var dp:PDouble):LongInt; stdcall;
{berspringt genau einen Zwischen-Header und liefert die Blockl„nge
in Doubles; hoffentlich ist die Blockl„nge durch 8 teilbar}
function DdeDataToArray(hindata:HDdeData; format:EClip; outchar: Bool):
PArray; stdcall;
{gemeinsame Routine fr DDEREQ und DDEADV,
wandelt DDE-Daten aus Handle in Matlab-Array um}
procedure mxGetStringW(a:PArray; sp:PWChar; buflen:LongInt); stdcall;
{Unicodes aus Matlab-Array herausziehen, buflen in BYTES}
function mxCreateStringW(sp:PWChar):PArray; stdcall;
{Unicodes in neues Matlab-Array einsetzen}
procedure advNewInfo(conv:HConv; item:Hsz; cf:UInt; format:EClip;
outchar:Bool; arrayname,evalstring: PChar); stdcall;
{Neuanlage eines Listenelements; evtl. vorher vorhandenes entfernen.
Parameter-Reihenfolge und stdcall erm”glicht Speicher-Kopie}
procedure advDeleteInfo(conv:HConv; item:Hsz; cf:UInt); stdcall;
{L”scht die Daten aus der einfach verketteten Liste;
der Aufruf mit allen drei Parametern =0 l”scht alles.
Die zugeh”rigen String-Handles werden freigegeben.
Falls "multithreadend", msste das Zeug in einen kritischen Abschnitt}
implementation
function GetInst; external 'ddeinit.dll' index 11;
procedure HandleDdeError; external 'ddeinit.dll' index 12;
function TestInputArgs; external 'ddeinit.dll' index 13;
function ArrayToStringHandle; external 'ddeinit.dll' index 14;
function CheckClipFormat; external 'ddeinit.dll' index 15;
procedure PutErr; external 'ddeinit.dll' index 16;
procedure PutWarn; external 'ddeinit.dll' index 17;
function MyRegisterClipboardFormat; external 'ddeinit.dll' index 18;
function ArrayToStringHandles; external 'ddeinit.dll' index 19;
function FreeStringHandle; external 'ddeinit.dll' index 20;
function Alloc_Datalen; external 'ddeinit.dll' index 21;
procedure str_count_numbers; external 'ddeinit.dll' index 22;
procedure str_to_numbers; external 'ddeinit.dll' index 23;
procedure str_from_numbers; external 'ddeinit.dll' index 24;
procedure PrepareXlTable; external 'ddeinit.dll' index 25;
function SkipXlFloatHeader; external 'ddeinit.dll' index 26;
function DdeDataToArray; external 'ddeinit.dll' index 27;
procedure mxGetStringW; external 'ddeinit.dll' index 31;
function mxCreateStringW; external 'ddeinit.dll' index 32;
procedure advNewInfo; external 'ddeinit.dll' index 41;
procedure advDeleteInfo; external 'ddeinit.dll' index 42;
end.
Detected encoding: UTF-8 | 0
|