array pointers in matlab
4 ビュー (過去 30 日間)
古いコメントを表示
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 件のコメント
Malcolm Lidierth
2011 年 4 月 19 日
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.
回答 (3 件)
Chirag Gupta
2011 年 4 月 19 日
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 件のコメント
Kaustubha Govind
2011 年 4 月 19 日
The documentation is here: http://www.mathworks.com/help/techdoc/matlab_external/f42650.html
Sam Van der Jeught
2011 年 4 月 19 日
1 件のコメント
Chirag Gupta
2011 年 4 月 19 日
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
2014 年 2 月 14 日
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 件のコメント
参考
カテゴリ
Help Center および File Exchange で LabVIEW についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!