array pointers in matlab
4 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Hi all,
I'm trying to implement a dll that I have created in Labview into Matlab. When the output value is a simple integer or floating point number, this poses no problems. However, when the dll created in Labview exports an array as output, an array pointer is used:
void __stdcall Test(int16_t outputArray[], int32_t len); //Testfunction in header file
My question is how do I read out the data present at this point in memory, in Matlab? As said before, when the output is a single number, I can simply
loadlibrary SharedLib.dll SharedLib.h alias lib
output = calllib('lib', 'Test')
unloadlibrary lib
in Matlab, but this obviously doesn't work now. Any guidance towards a solution would be greatly appreciated.
Best regards,
Sam
1 Kommentar
Malcolm Lidierth
am 19 Apr. 2011
v = zeros(10,1,'uint16');
v = calllib('lib','Test',v,int32(10));
should do the trick. MATLAB creates the libpointer automatically as I recall. On output, v is a int16 array, not a libpointer - hence no v.value property.
Antworten (3)
Chirag Gupta
am 19 Apr. 2011
Hi Sam,
I coded up a sample library with a signature of:
void TestFunc(int outArray[],int len);
Then to use this, you need to make use of libpointers.
Sample code for using my function was:
loadlibrary('TestShared.dll','TestFile.h','alias','lib')
libfunctionsview lib
var = zeros(10,1);
% Creating a pointer from var of int32 type. In your case it would % be int16
v = libpointer('int32Ptr',var)
v.Value
v = calllib('lib','TestFunc',v,int32(10))
v.Value
unloadlibrary lib
You can find more examples with other types in the documentation
1 Kommentar
Kaustubha Govind
am 19 Apr. 2011
The documentation is here: http://www.mathworks.com/help/techdoc/matlab_external/f42650.html
Sam Van der Jeught
am 19 Apr. 2011
1 Kommentar
Chirag Gupta
am 19 Apr. 2011
Can you check what exactly the function signature is returning in MATLAB.
libfunctionsview lib should show that.
Also, try whos v to check v's type after the function call.
Jim Hokanson
am 14 Feb. 2014
Just in case anyone comes across this, I think you want the following:
For: void __stdcall Test(int16_t outputArray[], int32_t len); //Testfunction in header file
Assuming the library is referred to as 'lib'
len = 10; temp = zeros(1,len,'int16'); ptr = libpointer('int16Ptr',temp);
calllib('lib','Test',ptr,int32(len))
data = get(ptr,'Value')
The key point is that the output is void, so you don't assign an output to calllib, i.e. you don't do:
output = calllib
Since you are working with a pointer you need to go back to the pointer and extract its value.
NOTE: I wasn't sure what the value was, but if you do get(ptr) Matlab will display information about the object.
0 Kommentare
Siehe auch
Kategorien
Mehr zu LabVIEW finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!