auf eine DLL von Matlab zugreifen

Um mit der Software Matlab auf eine DLL zuzugreifen, haben die Ersteller des Programms folgende Funktionen eingebaut:

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);