Я работаю над обновлением графического интерфейса приложения (MFC) с использованием .NET и WPF.Приложение собирает данные в режиме реального времени, а графический интерфейс должен визуализировать эти данные (в режиме реального времени).Общий план состоит в том, чтобы использовать C ++ / CLI в качестве уровня взаимодействия между собственным приложением и управляемой частью графического интерфейса.
У меня есть собственный класс с массивами байтов, содержащий «заголовок», дающий длину массиваи тип элементов в нем.Я пытаюсь написать слой взаимодействия в 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
, что вызывает сбой.