Dynamic Library without a .h file
37 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Benjamin Schwabe
el 7 de Feb. de 2012
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...
Thanks!
0 comentarios
Respuesta aceptada
Walter Roberson
el 7 de Feb. de 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.
4 comentarios
Walter Roberson
el 7 de Feb. de 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
el 8 de Feb. de 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?
Más respuestas (0)
Ver también
Categorías
Más información sobre Startup and Shutdown en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!