Marshal double array to MATLAB with IntPtr
1 次查看(过去 30 天)
显示 更早的评论
I have a .Net library with a method that returns an interface with 2 members:
IntPtr PointerToFirstElement { get; }
int Count { get; }
These allow access to an array of doubles without copying. I want to plot this array in MATLAB by calling the method on the .Net library, but I can't figure out how to create a plottable MATLAB structure from my IntPtr and Count.
0 个评论
回答(1 个)
Guillaume
2018-5-31
I don't think matlab has any way to access directly the unmanaged memory pointed to by the IntPtr as that would normally be wrapped in an unsafe block.
All I can think of is going through the marshalling methods to make a copy to managed memory and get that through matlab. However, I'm not experienced enough with that aspect of .Net to be sure it is really going to work:
netarray = NET.createArray('System.Double', yourobject.Count); %allocate managed array to receive copy of unmanaged data
System.Runtime.InteropServices.Marshal.Copy(yourobject.PointerToFirstElement, netarray, 0, yourobject.Count); %copy unmanaged to managed
data = double(netarray); %convert to matlab array
If I got it wrong, it is very likely to crash matlab.
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!