auf eine DLL von Matlab zugreifen
Um mit der Software Matlab auf eine DLL zuzugreifen, haben die Ersteller des Programms folgende Funktionen eingebaut:
- loadlibrary
- unloadlibrary
- libisloaded
- calllib
- libfunctionsview, libfunctions, …
Als Ausgangsbasis muss eine DLL Datei vorliegen, sowie eine dazugehörige Headerdatei mit der Endung *.h die die exportierten Funktionsaufrufe beschreibt.
Nun kann mit folgendem Aufruf die DLL geladen werden
strDLL = 'leere_DLL'; loadlibrary( strDLL );
zum Schließen wird
unloadlibrary(strDLL);
aufgerufen. Etwas ausführlicher, mit Prüfung ob die DLL schon (oder noch) geöffnet ist, sieht das so aus:
strDLL = 'leere_DLL';
%strDLL = 'hs3';
if ~libisloaded( strDLL )
loadlibrary( strDLL );
pause( 0.2 );
if ~libisloaded( strDLL )
error( [ 'Konnte die DLL nicht laden: ' , strDLL ] )
else
disp 'DLL geladen';
end
end
% eigener code
if libisloaded( strDLL )
unloadlibrary(strDLL);
disp 'DLL getrennt';
end
Der Zugriff auf eine Funktion geschieht dann wie folgt:
A=100 b=23 c = calllib(strDLL, 'AddNumbers', A, b)
Sollen mehrere Parameter zurückgegebn werden, so muss eine DLL-Funktion mit Pointern übergeben werden. An den Adressen werden dann die Rückgabewerte von der DLL übergeben.
[c1, c2, c3] = calllib(strDLL, 'SumAndSquare', A, b)
Jedoch verarbeitet MAtlab die Zuweisung wie gewohnt, so dass links vom Gleichheitszeichen die Ergebnisse stehen!
Die zur DLL gehörende Headerdatei enthält:
extern "C" double AddNumbers (double a, double b) ; extern "C" double SumAndSquare (double *a, double *b);
