Я работаю над обновлением GUI приложения native (MFC) с использованием .NET и WPF. Приложение собирает данные в режиме реального времени, и графический интерфейс должен визуализировать эти данные (в режиме реального времени). Общий план - использовать C++/CLI в качестве уровня взаимодействия между собственным приложением и частью управляемого GUI.Как использовать этот собственный массив в моем классе .NET?
У меня есть собственный класс с байтовыми массивами, содержащий «заголовок», дающий длину массива и тип элементов в нем. Я пытаюсь написать уровень совместимости в C++/CLI между этим родным классом и управляемым .NET-классом.
Я хочу использовать неуправляемый массив байтов в управляемой части приложения. Я несколько ошеломлен информацией о различных блогах и центрах документации. Это контур того, что у меня до сих пор, это вроде как работы, но иногда сбой *. Я не уверен, что это наиболее подходящее решение или даже как правильно его реализовать. Я хотел бы знать, есть ли более подходящий подход?
// Fetch numbers from the native class into unmanaged memory.
IntPtr ipNumbers = InteropServices::Marshal::AllocHGlobal(sizeof(int) * arrayLength))
nativeClass->fetchNumbers((int *) ipNumbers.ToPointer(), arrayLength);
// Copy data from unmanaged memory into a managed array.
cli::array<int, 1> ^numbers = gcnew cli::array<int, 1>(arrayLength);
InteropServices::Marshal::Copy(ipNumbers, numbers, 0, arrayLength);
InteropServices::Marshal::FreeHGlobal(ipNumbers);
*) Краш сообщение:. «Windows вызвало точку останова в myprogram.exe Это может быть связано с коррупцией в куче, что указывает на ошибку в myprogram.exe или любой из библиотек DLL он нагруженных . [...] ". Из того, что я могу сказать, это FreeHGlobal
, который вызывает сбой.
Ваш код выглядит хорошо, я не знаю, почему это может вызвать сбой, не видя больше вашего кода. Вы можете избежать выделения неуправляемой памяти с помощью pin_ptr в массив чисел и передать это непосредственно в fetchNumbers. –
Вместо этого я изменил код, чтобы использовать pin_ptr чисел, и это похоже на работу. (Я обновляю свой пост с помощью кода.) :-D Я думаю, единственное, что мне нужно знать, это то, что это лучший подход. –