.NET 2.x преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода - C#
Формулировка задачи:
есть COM интерфейс с методом:
на C# он выглядит так:
этот интерфейс используется для асинхронного получения данных от COM объекта.
раньше реализация была такая:
все было хорошо, до того момента пока не столкнулись с проблемой запуска приложения с сетевой шары, по умолчанию запрещена загрузка неуправляемого кода :-(
Подскажите как сделать новую реализацию этого метода без использования
virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE OnReceivePacket( /* [in] */ long dwSize, /* [size_is][in] */ BYTE __RPC_FAR *Data) = 0;
void OnReceivePacket(int dwSize, ref byte Data);
unsafe public void OnReceivePacket(int dwSize, ref byte Data) { byte[] bData = new byte[dwSize]; fixed (byte* pData = &Data) { Marshal.Copy(new IntPtr(pData), bData, 0, dwSize); } //..... // Обработка данных из bData //..... }
unsafe
? Как преобразоватьref byte
вbyte[]
или вIntPtr
Решение задачи: «.NET 2.x преобразование ref byte в byte[] или в IntPtr без использования неуправляемого кода»
textual
Листинг программы
class Program { static void Main(string[] args) { byte[] temp = new byte[] { 1, 2, 3, 4, 5 }; byte[] data = Read(temp.Length, ref temp[0]); for (int i = 0; i < data.Length; i++) { Console.WriteLine(data[0]); } } public static byte[] Read(int dwSize, ref byte pData) { byte[] data = new byte[dwSize]; for (int i = 0; i < dwSize; i++) { data[i] = Marshal.ReadByte(pData, i); } return data; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д