Я использую пример Kinect Face-Tracking Basics WPF для сбора данных с объекта. Я могу получить доступ к данным в текстовом файле и т. Д., Но я хочу записать данные в управляемую память в процессе C#, и программа .NET в Labview забирает данные из того же места.Запись в память в .NET и получение данных процесса в лабораторном режиме
До сих пор, это то, что у меня есть:
this.facePoints3D = frame.Get3DShape();
// using (MemoryStream stream = new MemoryStream())
// {
//var sw = new StreamWriter(stream);
int n = 121;
foreach (Vector3DF[] vector in facePoints3D.GetSlices(n))
{
//convert from float to byte array before we pass on to memory
var bytearray = new byte[vector.Length * this.facePoints3D.Count];
Buffer.BlockCopy(vector, 0, bytearray, 0, bytearray.Length);
//Initialize unmanaged memory to hold array.
int size = Marshal.SizeOf(bytearray[0]) * bytearray.Length;
IntPtr pnt = Marshal.AllocHGlobal(size);
try
{
//copy the array to unmanaged memory.
Marshal.Copy(bytearray, 0, pnt, bytearray.Length);
// Copy the unmanaged array back to another managed array.
byte[] bytearray2 = new byte[bytearray.Length];
Marshal.Copy(pnt, bytearray2, 0, bytearray.Length);
//Console.WriteLine("The array was coppied to unmanaged memory and back.");
}
finally
{
// Free the unmanaged memory.
Marshal.FreeHGlobal(pnt);
}
}
До сих пор, у меня есть программа LabView правильно настроить, как
процесса A (C#): MemoryStream буфера -> Маршал AllocHGlobal -> Маршал Копия -> Маршал Утилизатор -> IntPtr ToInt64 Процесс B (labview): Значение IntPtr -> Marshall AllocHGlobal -> Маршал Копия -> Назначение
Теперь конец лабиринта работает хорошо, но, похоже, он не собирает значения из памяти.
Совет, пожалуйста?
Это два отдельных процесса, да @JMarsch. Один в C# Запись в поток памяти и другое я думаю, что пример файла с отображением памяти будет работать лучше всего для меня на данный момент. – Calorified
@Calorified Рад помочь. Если это работает для вас, отметьте мой ответ в качестве ответа (флажок чуть ниже балла точки). Это даст мне несколько моментов, но что еще более важно, будущие читатели с той же проблемой знают, что этот маршрут работал на вас. – JMarsch
привет @JMarsch. Я получил настройку файла mappedmemory, но у меня есть сбой в моем коде из-за преобразования типа.Вот код, возможно, вы могли бы помочь немного больше: this.facePoints3D = frame.Get3DShape(); foreach (Vector3DF [] vector in facePoints3D.GetSlices (n)) { byte [] bytearray = новый байт [vector.Length * this.facePoints3D.Count]; Buffer.BlockCopy (вектор, 0, bytearray, 0, bytearray.Length); } – Calorified