.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;
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д