序列化结果是byte[],怎么传呢?
我只会传string

解决方案 »

  1.   

    用byte创建message?
    可以给个简单的代码吗?
      

  2.   

    所有 win32 api 的 参数, 返回值都是 32 位的一个数值
      

  3.   

    使用指针操作.public  IntPtr ClassToIntPtr(ProcessArgs arg,out int length)
    {
    byte [] temp = SerializationUtility.ToBytes(arg);
    length = temp.Length;
    IntPtr ptr = Marshal.AllocHGlobal(length);
    Marshal.Copy(temp,0,ptr,length);
    return ptr;
    } public  ProcessArgs IntPtrToClass(IntPtr ptr,int length)
    {
    byte [] temp = new byte[length];
    Marshal.Copy(ptr,temp,0,length);
    return SerializationUtility.ToObject(temp) as ProcessArgs;
    }ProcessArgs 为可序列化的类,SerializationUtility是二进制序列化类,要实现.
    SendMessage后调用Marshal.FreeHGlobal释放掉ClassToIntPtr返回的指针
    lpData声明成IntPtr. 
    传递任意可序列化类
      

  4.   

    public  IntPtr ClassToIntPtr(ProcessArgs arg,out int length)
            {
                byte [] temp = SerializationUtility.ToBytes(arg);
                length = temp.Length;
                IntPtr ptr = Marshal.AllocHGlobal(length);
                Marshal.Copy(temp,0,ptr,length);
                return ptr;
            }        public  ProcessArgs IntPtrToClass(IntPtr ptr,int length)
            {
                byte [] temp = new byte[length];
                Marshal.Copy(ptr,temp,0,length);
                return SerializationUtility.ToObject(temp) as ProcessArgs;
            }
    Length是什么长度啊?
    谢谢
      

  5.   

    序列化我明白。就是序列化后得到byte[].
    数组类型我不会传。
      

  6.   

    SerializationUtility
    命名空间是什么?我怎么找不到Using
      

  7.   

    length是你传递的byte数组的长度.这里不是传的数组类型,传的是一个IntPtr指针.相当于结构原形里的void*,通过指针和数据长度,才能得到byte数组
      

  8.   

    不好意思,我上csdn是一阵阵的,所以你的留言没看到SerializationUtility是我项目中用来进行二进制序列化与反序列化的类,你需要自己写一个将类序列化成字节数组并将其拷贝到一块内存区域后,用一个指针记录该区域的首地址,而该内存区域的大小,就是字节数组的长度,这个长度需要记录,可以搜索查看一下 CopyDataStruct的c语言结构.因为通过指针,仅仅是传递了一块内存区域的首地址,所以,到底从这块区域读取多少个byte,需要一个数字也就是length来记录.通过 首地址+字节数 来读取类序列化后的数据,然后将其反序列化成类对象