Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > Marshaling и TCP


Автор: ПашкаКорчагин 27.1.2008, 20:51
пытась передать структуру по сети... показалось что оптимальный вариант Маршалинг... только вот беда.. маршалинг не совсем удобен с референс обжектами
в любом случае для теста написал такую структуру...
Код

using System.Runtime.InteropServices;
using System;
[Serializable]
[StructLayout(LayoutKind.Sequential)] 
public struct TestStruct{
    [MarshalAs(UnmanagedType.LPStr, SizeConst = 256)]  string str1;
    [MarshalAs(UnmanagedType.LPStr, SizeConst = 256)]  string str2;


    public string Str1
    {
        get { return str1; }
        set { str1= value; }
    }
    
    public string Str2
    {
        get { return str2; }
        set { str2= value; }
    }

}


на виходе ... при попытке демаршалинга получил 
The specified structure must be blittable or have layout information.
Parameter name: structure

ну ексепшн ясен... может кто тыкнет в что-не-так?

Код


 public static T ByteBufferToObject<T>(byte[] data)
        {
            IntPtr ip = Marshal.AllocHGlobal(data.Length);
            Marshal.Copy(data, 0, ip, data.Length);
            T o = (T)Marshal.PtrToStructure(ip, typeof(T));
            Marshal.FreeHGlobal(ip);
            return o;
        }     

Автор: mr.DUDA 28.1.2008, 21:31
[StructLayout] мешает, имхо.

Автор: arilou 30.1.2008, 14:48
ПашкаКорчагин, если перформанс не критичен, что мешает воспользоваться стандартной сериализацией для упаковки структуры в байтовый массив и отправки его через сеть?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)