How to create dll in Matlab to be used in Labview
조회 수: 20 (최근 30일)
이전 댓글 표시
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.
댓글 수: 0
채택된 답변
Kaustubha Govind
2012년 11월 12일
편집: Kaustubha Govind
2012년 11월 12일
I'm not sure exactly what kind of interface LabVIEW requires, but this is how you need to interface with a DLL generated using MATLAB Compiler. Note that you will also need to install the MATLAB Compiler Runtime (MCR) on the machine that the DLL is being deployed upon.
I wonder of what you actually need is a standalone DLL (independent of the MCR) - in that case using MATLAB Coder might be the better option.
댓글 수: 4
Kaustubha Govind
2012년 11월 15일
Jong: How does LabVIEW "search" for interface exactly? Does it use the DLL header? Perhaps you might be able to ask NI's Technical Support team?
추가 답변 (4개)
David Roohy
2019년 1월 16일
I've put together an example on how to do this from start to finish:
댓글 수: 0
Michael Kaiser
2012년 11월 16일
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?
댓글 수: 0
shubham kumar gupta
2021년 2월 4일
편집: shubham kumar gupta
2021년 2월 4일
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
댓글 수: 0
Ricardo Gutierrez
2021년 8월 4일
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
Michele
2025년 2월 11일
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.
참고 항목
카테고리
Help Center 및 File Exchange에서 C Shared Library Integration에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!