(1/4)Matlab(.exe)调用C/C++生成的(.dll)——Matlab安装MinGW
(2/4)Matlab(.exe)调用C/C++生成的(.dll)——Matlab调用DLL
(3/4)Matlab(.exe)调用C/C++生成的(.dll)——MCR下载/安装
(4/4)Matlab(.exe)调用C/C++生成的(.dll)——已编译的应用程序(.exe)不支持使用头文件(.h)加载库(loadlibrary)
详细信息请查看
Matlab Search Help:Calling Shared Libraries in Deployed Applications
- 注意事项:
(1)已编译的应用程序(.exe)不支持使用头文件(.h)加载库;
(2)因此,要创建使用loadlibrary带有头文件的函数的应用程序。
请执行以下步骤:
11、创建原型MATLAB文件。假设您loadlibrary使用以下语法进行调用。
loadlibrary(library,header);
例如:loadlibrary('alg_dll.dll','alg.h'); %加载dll模块。
在MATLAB中仅运行一次以下命令以创建原型文件:
loadlibrary(library,header,'mfilename','mylibrarymfile');
例如:loadlibrary('alg_dll.dll','alg.h','mfilename','mylibrarymfile');
运行结束后,在当前文件夹下自动生成mylibrarymfile.m文件。如果您使用的是Windows,则会在当前文件夹中创建另一个名为library_thunk_pcwin64.dll的文件。
22、loadlibrary将MATLAB中的调用更改为以下内容:
loadlibrary(library,header);
//更改为
loadlibrary(library,@mylibrarymfile);
例如:loadlibrary('alg_dll.dll',@mylibrarymfile);
为避免多次加载库文件,系统发出警告!!!可用以下:
例如:
if ~libisloaded('alg_dll')
loadlibrary('alg_dll.dll',@mylibrarymfile);
end
33、编译和部署应用程序(.exe)。
方法一:如果您使用的是应用程序编译器或库编译器应用程序,请将文件library_thunk_pcwin64.dll添加到应用程序运行所需的文件部分(mylibrarymfile.m默认自动加入)。
方法二:如果您将库作为未与部署的应用程序集成的外部文件提供,请将库.dll文件放在与已编译应用程序相同的文件夹中。如果您使用的是Windows,则必须将library_thunk_pcwin64.dll集成到已编译的应用程序中。
- 此方法的好处是您可以用更新的版本替换库,而无需重新编译部署的应用程序。仅当库中函数的函数签名未更改时,用不同版本替换库才有效。这是因为mylibrarymfile.m和library_thunk_pcwin64.dll与库中函数的函数签名相关联。