How to create dll in Matlab to be used in Labview
Mostrar comentarios más antiguos
Hi all,
I have problem with converting m-file in Matlab to dll file to be used in Labview. I used MCC to create dll from which Labview cannot find inputs and outputs. And is there any way to convert m-file to be used in Labview except using Matlab node due to its slow calculation speed? Thank you in advance.
Respuesta aceptada
Más respuestas (4)
David Roohy
el 16 de En. de 2019
1 voto
I've put together an example on how to do this from start to finish:
Michael Kaiser
el 16 de Nov. de 2012
0 votos
I'm up against the same issue. I've created both C shared libraries and C++ shared libraries, but cannot use in LabVIEW. How is the MATLAB runtime invoked, initialized?
shubham kumar gupta
el 4 de Feb. de 2021
Editada: shubham kumar gupta
el 4 de Feb. de 2021
0 votos
GET A DLL FROM MATLAB:
mcc -v -B csharedlib:sumarray sumarray.m
create a scriptWrapper.c,scriptWrapper.h,scriptWrapper.def file[attached]
Now run below
mbuild -v sumarrayWrapper.c sumarray.lib LINKFLAGS="$LINKFLAGS /DLL /DEF:sumarrayWrapper.def" LDEXT=".dll" CMDLINE250="mt -outputresource:$EXE';'2 -manifest $MANIFEST"
now load this new scriptwrapper.dll in labview via import option, and add your old script.dll to this lvlib in labview
Always run loadFunction.vi before using your mainfunction.vi
Ricardo Gutierrez
el 4 de Ag. de 2021
0 votos
Dear Shubham Kumar Gupta:
I tested the code for preparing matlab DLL for labview, I have some questions, maybe you can help me. How can I create the Wrapper.c file when you have multiple inputs and multiple outputs?
1 comentario
Michele
el 11 de Feb. de 2025
The same way you can do for a 1 o 1 script.
This's my script:
function [SNR, PhaseNoise] = Measure_SNR_w_SBX(FullName, FigurePath)
close all
[...]
end
When you compile this script you'll obtain two functions with a signature like this:
extern LIB_MINE_API
bool MW_CALL_CONV mlxMeasure_SNR_w_SBX(int nlhs, mxArray *plhs[], int nrhs, mxArray
*prhs[]);
extern LIB_MINE_API bool MW_CALL_CONV mlfMeasure_SNR_w_SBX(int nargout, mxArray** SNR_dB, mxArray** PhaseNoise_mean, mxArray* FullName, mxArray* Figure_path);
You can use both to write your wrapper based on your experience with MatLab C API.. I'm not very familiar with it so I used mlf* variant.
To call/wrap this you need to do something like that:
int wmlfMeasure_SNR_w_SBX(char* FullName, char* FigurePath, double* SNR_dB, double* PhaseNoise_mean)
{
int result = 1;
mxArray* mFullName = mxCreateString(FullName);
mxArray* mFigure_path = mxCreateString(FigurePath);
int nargout = 2;
mxArray* mSNR_dB = NULL;
mxArray* mPhaseNoise_mean = NULL;
result = mlfMeasure_SNR_w_SBX(
nargout,
&mSNR_dB,
&mPhaseNoise_mean,
mFullName,
mFigure_path);
memcpy(SNR_dB, mxGetPr(mSNR_dB), sizeof(double));
memcpy(PhaseNoise_mean, mxGetPr(mPhaseNoise_mean), sizeof(double));
mxDestroyArray(mFullName);
mxDestroyArray(mFigure_path);
mxDestroyArray(mSNR_dB);
mxDestroyArray(mPhaseNoise_mean);
return result;
}
The only tricky part is to remember to use & when dealing with outputs parameters.
Categorías
Más información sobre C Shared Library Integration en Centro de ayuda y File Exchange.
Productos
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!