MATLAB Answers

Dynamic Library without a .h file

81 views (last 30 days)
Hello all,
I'm trying to establish communication with a hardware tool and it's API is given by a two-level approach.
For the second level, I don't have an .h-file and loadlibrary requires one. Can I load the dll anyway? (I assume the other dll will then be able to still communicate with this dll...


Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 7 Feb 2012
You will not be able to use the MATLAB loadlibrary() call without a .h file.
If you do not need to call in to the dll yourself, then ideally you should not need to loadlibrary() it, as the dll that you do call should load it using OS calls.


Show 1 older comment
Benjamin Schwabe
Benjamin Schwabe on 7 Feb 2012
Hello Walter,
I've talked to the programmer of the API and he told me, that the level 1 dll dynamically loads the other one (CDALib.dll). Is such a structure possible with MatLab?
Walter Roberson
Walter Roberson on 7 Feb 2012
A loaded DLL can make callbacks to the MATLAB engine to call loadlibrary() -- provided, of course, that the .h exists.
There are operating system calls that can load libraries without needing .h files, but those calls rely on the code to "just know" what the binary calling sequence is under all conditions.
But MATLAB code doesn't use binary calling sequences, and MATLAB likes to pass around mxArray structures and kin, so there needs to be an interface layer between the way MATLAB operates and the way DLL's operate internally. MATLAB builds that interface code based upon the .h files, to navigate between the dynamically typed MATLAB and the statically typed DLL calls.
A DLL is in machine language, compiled from whatever source code language was suitable for the task (e.g., C, C++, Fortran). The DLL can make operating system calls and call statically typed routines, so the DLL can load additional libraries dynamically, as long as it knows _exactly_ how to talk to them.
MATLAB's mechanism is general, to try to talk to any DLL. Any one DLL only has to deal with the specific interfaces that the DLL needs to talk to.
Kaustubha Govind
Kaustubha Govind on 8 Feb 2012
Benjamin: The error "Cannot initialize CDALib" seems to suggest that the OS is unable to load CDALib from the DLL that interfaces with MATLAB. Perhaps you need to add the directory containing CDALib.dll to the System PATH variable. Then restart MATLAB and try again?

Sign in to comment.

More Answers (0)