.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;
}
}