how to call a C# function, foo(out byte [])? -- help passing a byte pointer
古いコメントを表示
Been struggling to call the following function in a C# dll:
public bool GetLatestBuffer(out byte[] buffer)
I've allocated the buffer in Matlab and tried various castings with libpointer, but keep getting the result:
No method 'GetLatestBuffer' with matching signature found for class ...
I could write a wrapper in C# that allocates the buffer ... but would rather do the memory management in Matlab.
My pseudocode is basically:
NET.addAssembly(dllLoc)
ls = luma_ns.Luma(initParams);
ls.function1(params) % --> it works passing parameters by value
buf = zeros(10000,'uint8'); % tried uint16, int16, etc.
pbuf = libpointer('uint8Ptr',buf);
ls.GetLatestBuffer(pbuf) % doesn't match the prototype of out byte []
No method 'GetLatestBuffer' with matching signature found for class 'Luma_ns.Luma'.
Thanks!!
採用された回答
その他の回答 (2 件)
James Tursa
2014 年 6 月 5 日
Have you tried changing the header signature to something more friendly to MATLAB, but have the same basic I/O? E.g.,
bool GetLatestBuffer(char *buffer);
3 件のコメント
daniel rasnow
2014 年 6 月 6 日
James Tursa
2014 年 6 月 6 日
Don't recompile. Just create a new header file off to the side for MATLAB to use. I.e., copy the actual header h file to a new file, modify that new file by changing the signature of the function in question, then use that new header h file for calllib in MATLAB.
Friedrich
2014 年 7 月 22 日
This wont work because that is the .NET interface he is using and not loadlibrary!!!!
Anthony
2014 年 7 月 17 日
Hi,
You can create a byte[] like this:
A = NET.createArray('System.Byte',4).
Then you just have to pass it to your function.
Hope it helps,
Anthony
1 件のコメント
daniel rasnow
2014 年 7 月 20 日
カテゴリ
ヘルプ センター および File Exchange で .NET Client Programming についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!