calllib crashes Matlab... no error given

6 Ansichten (letzte 30 Tage)
tlawren
tlawren am 14 Okt. 2011
Bearbeitet: Chris am 27 Nov. 2024 um 18:04
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 Kommentare
tlawren
tlawren am 18 Okt. 2011
Any advice or suggestions?
Chris
Chris am 27 Nov. 2024 um 17:59
Bearbeitet: Chris am 27 Nov. 2024 um 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

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

tlawren
tlawren am 2 Nov. 2011
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 Kommentar
rubina mahtab
rubina mahtab am 7 Dez. 2016
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?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Philip Borghesani
Philip Borghesani am 17 Okt. 2011
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 Kommentare
tlawren
tlawren am 17 Okt. 2011
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 am 19 Okt. 2011
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.

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Call C from MATLAB finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by