.NET 2.x преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода - C#

Узнай цену своей работы

Формулировка задачи:

есть COM интерфейс с методом:
Листинг программы
  1. virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE OnReceivePacket(
  2. /* [in] */ long dwSize,
  3. /* [size_is][in] */ BYTE __RPC_FAR *Data) = 0;
на C# он выглядит так:
Листинг программы
  1. void OnReceivePacket(int dwSize, ref byte Data);
этот интерфейс используется для асинхронного получения данных от COM объекта. раньше реализация была такая:
Листинг программы
  1. unsafe public void OnReceivePacket(int dwSize, ref byte Data)
  2. {
  3. byte[] bData = new byte[dwSize];
  4. fixed (byte* pData = &Data)
  5. {
  6. Marshal.Copy(new IntPtr(pData), bData, 0, dwSize);
  7. }
  8. //.....
  9. // Обработка данных из bData
  10. //.....
  11. }
все было хорошо, до того момента пока не столкнулись с проблемой запуска приложения с сетевой шары, по умолчанию запрещена загрузка неуправляемого кода :-( Подскажите как сделать новую реализацию этого метода без использования

unsafe

? Как преобразовать

ref byte

в

byte[]

или в

IntPtr

Решение задачи: «.NET 2.x преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода»

textual
Листинг программы
  1. class Program
  2. {
  3.     static void Main(string[] args)
  4.     {
  5.         byte[] temp = new byte[] { 1, 2, 3, 4, 5 };
  6.         byte[] data = Read(temp.Length, ref temp[0]);
  7.         for (int i = 0; i < data.Length; i++)
  8.         {
  9.             Console.WriteLine(data[0]);
  10.         }
  11.     }
  12.  
  13.     public static byte[] Read(int dwSize, ref byte pData)
  14.     {
  15.         byte[] data = new byte[dwSize];
  16.         for (int i = 0; i < dwSize; i++)
  17.         {
  18.             data[i] = Marshal.ReadByte(pData, i);
  19.         }
  20.         return data;
  21.     }
  22. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.667 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы