%CALLDLL Universal calling of all routines contained in DLLs (32 bit)
% {retval=}CallDll('{DLL-Name:}Funktions-Name{ Prototyp}',...)
% Der erste Parameter bestimmt DLL-Name, Funktions-Name
% und Funktions-Prototyp (Typen der Parameter),
% die übrigen Parameter entsprechen den zu übergebenden
% Argumenten.
%
% DLL-Name
% Name der DLL, ggf. mit Pfadangabe,
% Erweiterung .DLL kann weggelassen,
% sonstige Erweiterungen müssen angegeben werden.
% Wird DLL-Name weggelassen, wird die zuletzt
% aufgerufene DLL verwendet.
% Wird DLL-Name angegeben, wird die vorhergehende
% herausgeworfen und (ggf. dieselbe!) neu geladen
% Am Anfang ist USER(.EXE) als DLL geladen.
% Funktions-Name
% Name der Funktion in der DLL
% Kann auch eine Zahl (numerischer Index) sein.
% Hexadezimale Zahlenangabe bitte mit Präfix '$'.
% Prototyp
% Nach einem Leerzeichen wird die Liste mit den Typen
% der Argumente angegeben. Allgemeine Syntax:
% {typ=}{typ{,typ{,...}}} ({typ=} ist Rückgabewert)
% typ
% Prototyp eines Einzelarguments. Allgemeine Syntax
% {*}t{[{size}]}
% * verwendet Zeiger auf Datentyp t
% Die Anzahl der Elemente im Array richtet sich nach
% der Größe des Matlab-Arrays
% t Basisdatentyp:
% h oder i08 Short-Integer vzb. 8 bit
% i oder i16 Integer vzb. 16 bit
% l oder i32 Long-Integer vzb. 32 bit
% c oder u08 Byte vzl. 8 bit
% u oder u16 Word vzl. 16 bit
% w oder u32 DWord vzl. 32 bit
% f oder f32 Single Gleitk. 32 bit
% g oder f64 Double Gleitk. 64 bit
% s oder str Zeichenkette ASCIIZ
% Groß/Kleinschreibung ist nicht von Belang
% s ist stets ein Zeiger
% [] verwendet Zeiger auf Datentyp t (wie *)
% UND macht eine Rückkonvertierung des Puffers zurück
% zur angegebenen Matlab-Variable. (Der zugeordnete
% Parameter MUSS eine Variable sein.)
% Die Dimension (Zeilen, Spalten) wird nicht geändert.
% [size] Zeiger auf Datentyp t mit Rückgabe (wie [])
% Die Anzahl der Elemente ist hierbei <size> Elemente.
% Die zurückgegebene Matrix ist ein Zeilenvektor,
% sofern sich <size> von der Größe (m*n) der Matrix
% unterscheidet. Die Angabe von <size> ist für t=str
% wirkungslos.
%
% Ohne Angabe von <Prototyp> oder einzelner <typ>
% werden diese intern anhand der Argumente "erraten":
% Numerischer Skalar: Long-Integer (i32)
% Numerischer Vektor/Matrix: (Zeiger auf) Long-Integer-Array (*i32)
% String: (Zeiger auf) nullterminierte Zeichenkette (str)
%
% Beispiel1: Simple Meldung als erster Aufruf von CallDll
% calldll('MessageBoxA',0,'Hallo Welt!','Matlab',0)
% etwas korrekter:
% calldll('user32:MessageBoxA',0,'Hallo Welt!','Matlab',0)
%
% Beispiel2: Abfragen der Teiler für NI-DAQ-Meßkarte
% x=1; y=1;
% calldll('nidaq:wfm_rate f64,i16,i16[1],u32[1]',1200,0,x,y)
% x,y
%
% Einschränkungen von CallDll:
% Aufrufe mit Callback sind nicht möglich
% Aufruf nur von Funktionen mit cdecl- oder stdcall-Aufrufkonvention
%
% h#s 04/01
Detected encoding: ANSI (CP1252) | 4
|
|