MATLAB Answers

Does MATLAB compiler require prototype file instead of header file ?

11 views (last 30 days)
Nhat Khang Truong Khanh
Nhat Khang Truong Khanh on 18 Dec 2019
Commented: Kojiro Saito on 19 Dec 2019
i use loadlibrary command to load 2 files from the SDK. Using it in Code view of App Designer:
loadlibrary('edk.dll','Iedk.h','addheader','IedkErrorCode.h','addheader','IEmoStateDLL.h','addheader','FacialExpressionDetection.h','addheader','MentalCommandDetection.h','addheader','IEmotivProfile.h','addheader','EmotivLicense.h','alias','libIEDK');
loadlibrary('edk.dll','IEmoStateDLL.h', 'alias', 'libIEmoStateDLL');
but when successfully compiled into web app, i got a log error that
Deployed applications must use a prototype file instead of a header file. To create the prototype, use the loadlibrary mfilename option.
After searching the direction, i still have no idea to change the code to prototype file. Do you have any suggestion on this ?

  0 Comments

Sign in to comment.

Answers (1)

Kojiro Saito
Kojiro Saito on 18 Dec 2019
Edited: Kojiro Saito on 18 Dec 2019
As described in this document, in order to use loadlibrary in deployed application converted by MATLAB Compiler, you need to use with prototype file name (loadlibrary(libname,@protofile)). And in order to create prototype files, you need to add 'mfilename' option to loadlibrary.
In MATLAB Command Window, do the following.
loadlibrary('edk.dll','Iedk.h','addheader','IedkErrorCode.h','addheader','IEmoStateDLL.h','addheader','FacialExpressionDetection.h','addheader','MentalCommandDetection.h','addheader','IEmotivProfile.h','addheader','EmotivLicense.h','alias','libIEDK', 'mfilename','testproto1');
loadlibrary('edk.dll','IEmoStateDLL.h', 'alias', 'libIEmoStateDLL', 'mfilename','testproto2');
Then, testproto1.m and testproto2.m will be created. After that, rewrite loadlibrary from prototype files in your App Designer app,
loadlibrary('edk.dll', @testproto1)
loadlibrary('edk.dll', @testproto2)
So, I suppose these loadlibrary would work in deployed applications.

  8 Comments

Show 5 older comments
Kojiro Saito
Kojiro Saito on 18 Dec 2019
From File Explorer, go to Properties of the folder and confirm your current user account has Write permission.
FolderProperties.png
Nhat Khang Truong Khanh
Nhat Khang Truong Khanh on 19 Dec 2019
i checked it and i had this permission
then, i try
libisloaded('edk.dll')
and the result gives
logical
0
which means fail, i dont understad that even the .m program (which is different with app designer and .m prototype file) in MATLAB runs well.
Also the prototype .m file is not created
Kojiro Saito
Kojiro Saito on 19 Dec 2019
Does loadlibrary with edk.dll works in your MATLAB code before compiling it as standalone application?
Also, edk.dll is not a library created by MATLAB Compiler SDK (Library Compiler)?
I'm asking because loadlibrary has the following limitation.
loadlibrary does not support libraries generated by the MATLAB Compiler SDK™ product.

Sign in to comment.


Translated by