calllib crashes Matlab... no error given

6 次查看(过去 30 天)
Greetings. I am trying to use some functions in a dll, but when I use calllib, Matlab crashes (and closes) without error.
Any idea what is going on?
EDIT: I just noticed that I got a warning(s) when I loaded the library.
Warning: Eval of const expression 10 ][ 1024 failed with error Unmatched right square bracket at (eval 5) line 1, at end of line syntax error at (eval 5) line 1, near "10 ]" Missing right curly or square bracket at (eval 5) line 2, at end of line
The offending line is...
char gnFn[10][1024];
???
  16 个评论
Chris
Chris 2024-11-27,17:59
编辑:Chris 2024-11-27,18:04
While troubleshooting a similar issue, an option we did not have to pursue (solved the issue by using 2019a instead of MATLAB 2024a) was using a parallel process to run the DLL. If the DLL took a certain amount of time (in our case, 1-2 seconds was enough to know there was a problem), then the parallel process could be killed and move on. At least that was the principle. Maybe someone out there could make that a reality for their issue/workaround.
Another part of the problem was that initially my inputs exceded what the DLL could handle. So the DLL could perhaps have been coded better, but that part at least was my error.
See also

请先登录,再进行评论。

采纳的回答

tlawren
tlawren 2011-11-2
I discovered the cause of my problem. The dll I am using requires a specific license and I didn't have that. The documentation provided by the creators of the dll's don't say anything about licensing, so it took some C code and phone calls to figure things out.
I should note that the Matlab errors/warnings I received seem to make no sense with respect to my license issue. Once I set my license files up correctly, everything ran seamlessly in Matlab!
  1 个评论
rubina mahtab
rubina mahtab 2016-12-7
I have the same issue as yours. But what I want matlab to do is to pop up a window saying license file missing, instead of crashing and without giving a proper error. I tried using try and catch but matlab still crashes. do you have any suggestion?

请先登录,再进行评论。

更多回答(1 个)

Philip Borghesani
Philip Borghesani 2011-10-17
The usual cause of a calllib call causing MATLAB to exit with no stack trace is the use of the wrong calling convention. loadlibrary defaults to cdecl but many 32 bit libraries are built with stdcall as the default calling convention.
This link gives one possible solution: 1-671ZZL
Another is to modify the c header file to properly state the calling convention and rebuild if needed.
  3 个评论
tlawren
tlawren 2011-10-17
The two warnings I've been seeing are one-in-the-same, at least I pretty sure they are. When I examined the prototype file that was generated by loadlibrary, I can see that 'int8#' is associated with the structure field gnFn. I'm guessing Matlab tries to parse char gnFn[10][1024], but doesn't know what to do with it so it just stops at 'int8#'. To be sure, if I remove the # symbol in the prototype file and then re-load the library, I don't get any warnings at all. This is wrong though, because the structure in the header still calls for a multi-dimensional array. Nonethelss, the calllib crash still occurs with this change, so it is likely not the cause of the crash, as you pointed out. Moreover, the function I'm trying to call in my dll doesn't even use this structure, so that also leads me to believe that it isn't behind the crash.
Could a third calling convention other than cdecl and stdcall be used in my dll?
Philip Borghesani
Philip Borghesani 2011-10-19
Without more information is unlikely that we can help you. The amount of information needed probably belongs in a tech support call not this area.
Needed information
# Matlab version
# copy of header file
# copy of DLL
# full text/error output from your call to loadlibrary and any calllib calls.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Call C from MATLAB 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by