IntroductionMATLAB® support using and calling DLL Windows libraries, This article shows how to use a library GXAO.DLL and the C Header file to call and control the GX1648 instrument. The GXAO.dll and the GxAo.h are provided with the GXAO software package. The example was written with MATLAB® 2020b.
MATLAB® DLL SupportIt is useful to note that after MATLAB® release 2015b, 32-bit DLL are no longer supported. Currently, the required tools are provided in a core installation of MATLAB® 9.9 without the addition of toolboxes[1]. Once a library is loaded, you can view[2] and call its C-compatible functions. More information about troubleshooting, limitations, data types etc. regarding MATLAB®'s C -interface is available on MathWorks' website[4], all of which is a recommended read when preparing to use driver libraries from MATLAB®.
MethodFirstly, the shared library needs to be loaded. This can be achieved by using the MATLAB® function loadlibrary(libname, hfile). In the included example, we are modifying the GxAo.h to simplify and remove the included using modified GxAo.h named m_GxAo.h for hfile argument. It includes Windows.h before GxAo.h. There are also other ways to include the needed Windows.h using overrides like loadlibrary(libname,hfile,Name,Value), master headers and so on. Different methods were tested to load libraries. The one used in the provided example was deemed the most stable out of the ones that were experimented with. Once library is loaded successfully, you can inspect the callable functions using another tool libfunctionsview[2]. Calling loaded functions is done using the MATLAB® function [x1,...,xN] = calllib(libname,funcname,arg1,...,argN) . The function accepts loaded libname, funcname and funcname's arguments[1]. The return values are ordered and correspond to the function prototypes, which are easy to view for example with MATLAB® function libfunctionsview, header file or by following the instrument's function reference available in its user's guide. Using libfunctionsview has the added benefit of mapping data types to Matlab. Please refer to MatlabGxAoExample for examples on how to load, initialize variables and call library functions. Note that when working with MATLAB® data types and especially when passing pointers, it is not uncommon to crash MATLAB® if not declaring the DLL function parameters properly, using for example libfunctionsview will help with this problem. he example provided includes a modified header file, m -file as well as a published run of the script using GX1648 that is supported by the GXAO software package.
SummaryCalling Marvin Test Solution DLL functions used to control instruments from MATLAB® is fairly straightforward. MATLAB® loadlibrary and calllib functions and the DLL C header are used to perform this task.
References[1] Matlab provides functions loadlibrary and calllib to load and call library functions:[2] Reading library function signatures gives an easy way of initializing MATLAB® variables correctly. A GUI is provided for reading library functions signatures:[3] A MATLAB® example was written and published using the above knowledge and is available to download:[4] MATLAB® external language interface for C libraries:
|