偶尔在zgke里的提示得出的问题,不懂之处。--“只要关于机器代码的都不能序列化的 Controls 线程 进程 这些都不可以.. 其实就是保护形式的内存都不可以.”??为什么Controls 线程 进程都和机器代码有关?(别说又叫我先去看看计算机的运作原理)??什么是保护形式的内存?怎么和非保护形式的内存区分?

解决方案 »

  1.   

    就是你进程不能访问的内存.保护形式的..我们的CONTROL有很多属性是继承WIN32的.如果你要序列化这个那问题会有好多.
    例如 控件的父容器--父容器--可能就到桌面了.  .
    这些内存是系统使用.而非你程序使用.如果不去序列化这些内存.你的控件又是一个不合法的控件.
      

  2.   

    内核对象
    数据结构不向外公开
    只给你handle用以访问
      

  3.   

    你这样理解把...你序列化要找到没个成员的值.非引用..如果找不到..就异常..
    例如
    public class Test
    {
      public int a;
      public Button C;
    }当序列化Test的时候  a是可以序列化的 a为值类型.. 然后我们去序列化C的时候 我们系列话到C.Text--String.是个引用.那我们继续..最后我们找到了Text的值char[]类型的..下一个 Handle 是一个句柄(内存地址) 我们可以看成int来序列化 这样一直找下去.找到的可能有些内存是系统保护的,不是你当前进程可以访问的.就失败了.
    而且这一路下去,所有的类还都要可以被序列化的标记.
      

  4.   


    要怎么知道继承于WIN32的Control的方法?怎么查看。
      

  5.   


    zgke朋友是否想说:建议你还是贴个新贴来问这些问题吧。
      

  6.   

    这个没什么好办法..但VS编辑器提供了序列化控件的方法. 如果非要序列话 Control.我们只序列化我们可以设置的属性就可以了.保护内存你也没办法设置的.. 
    第1个方案反射你需要的属性..例如你先反射属性获取那些是在哪个 属性窗上显示的..否反射出来.保存下来.(事件)这个需要直接保存类名和方法名
    第2个 IDE有个方法好能序列化成代码.然后序列化回来的方法.你找找把.