Marshal double array to MATLAB with IntPtr
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Respuestas (1)
Guillaume
el 31 de Mayo de 2018
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.
1 comentario
Ver también
Categorías
Más información sobre Deploy to .NET Applications Using MWArray API en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!