Problems with struct pointer pointer in calllib
Show older comments
I'm working with a header that has the following declaration:
struct ADI_FileHandle__ { int unused; }; typedef struct ADI_FileHandle__ *ADI_FileHandle;
One function I am using is:
DLLEXPORT ADIResultCode ADI_OpenFile(const unsigned short* path, ADI_FileHandle* fileH, ADIFileOpenMode mode);
My Matlab code calling this is:
result = calllib('ADIDatIOWin','ADI_OpenFile',int16(file_path),file_handle_pointer,file_open_mode);
This results in a value for unused (structure field in ADI_FileHandle__ ). A typical value is something like 1654585380. The result value indicates a success.
I then try to call another function:
DLLEXPORT ADIResultCode ADI_GetNumberOfChannels(ADI_FileHandle fileH, long* nChannels);
in Matlab as:
file_handle_pointer = libpointer('ADI_FileHandle__Ptr');
set(file_handle_pointer,'Value',struct('unused',int32(1654585380)))
n_channels_pointer = libpointer('longPtr');
result = calllib('ADIDatIOWin','ADI_GetNumberOfChannels',file_handle_pointer,n_channels_pointer);
At this point Matlab crashes.
What am I missing?
Thanks, Jim
5 Comments
Jim Hokanson
on 31 Mar 2014
Kaustubha Govind
on 31 Mar 2014
Sorry, I mistakenly created an answer (and deleted it), after realizing that you do follow the documentation: http://www.mathworks.com/help/matlab/matlab_external/working-with-pointers.html#f50712
Friedrich
on 31 Mar 2014
Are you sure the DLL can handle a made up file_handle_pointer? I would assume it crashes because no actual valid file was opened and hence the DLL crashes.
Have you tried calling the ADI_GetNumberOfChannels function from a plain C application with the exact same inputs?
Jim Hokanson
on 31 Mar 2014
Jim Hokanson
on 31 Mar 2014
Answers (0)
Categories
Find more on Startup and Shutdown in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!