代码中 smap 对象 如何实例化呢?
                 NATUPNPLib.IStaticPortMappingCollection mapping = nat.StaticPortMappingCollection;
                 int i = 0;
                 NATUPNPLib.IStaticPortMapping smap;
                 IEnumerator mapEm = mapping.GetEnumerator();
                 mapEm.Reset();
                 while (i < mapping.Count)
                 {
                     mapEm.MoveNext();
                     smap = mapEm.Current as IStaticPortMapping;
                     if (smap != null)
                     {
                         this.listBox1.Items.Add(smap.ExternalPort + "\t" + smap.InternalClient + "\t" + smap.Protocol + "\t" + smap.InternalPort);
                     }
                     if (smap == null)
                     {
                         break;
                     }
                     i++;
                 }

解决方案 »

  1.   

    首先,在下不是大牛
    IStaticPortMapping 貌似是NATUPNPLib对COM接口IStaticPortMapping的.net封装,至于怎么实例化,要看类库NATUPNPLib是怎么实现的
      

  2.   

    看了一下,这是IStaticPortMapping的声明public interface IStaticPortMapping它是一个接口,没法实例化
      

  3.   

    这是哪行出的“未将对象引用设置到对象的实例”,代码中 smap 是转换而来,不需要实例化,而且有判断,倒是 nat 和 mapping 可能报这错,简化下可以这样
    NATUPNPLib.IStaticPortMappingCollection mapping = nat.StaticPortMappingCollection;
    NATUPNPLib.IStaticPortMapping smap;
    IEnumerator mapEm = mapping.GetEnumerator();
    mapEm.Reset();
    while (mapEm.MoveNext())
    {
        smap = mapEm.Current as IStaticPortMapping;
        if (smap == null)
        {
            break;
        }
        this.listBox1.Items.Add(smap.ExternalPort + "\t" + smap.InternalClient + "\t" + smap.Protocol + "\t" + smap.InternalPort);
    }甚至直接用 foreach
      

  4.   

    回楼上的 还是包同样的错,未将对象引用设置到对象实例
    我把foreach代码贴上来 帮着看下吧 谢谢了。    //直接使用foreach循环,当MoveNext移到Count位置时,会产生异常,故采用变量i和mapcount进行控制
                     foreach (object n in mapping)
                     {
                         NATUPNPLib.IStaticPortMapping i = n as NATUPNPLib.IStaticPortMapping;
                        if (i != null)
                         {
                            this.listBox1.Items.Add(i.ExternalPort + "\t" + i.InternalClient + "\t" + i.Protocol + "\t" + i.InternalPort);
                         }
                         if (i == null)
                             break;
      

  5.   

    如何捕获这个异常呢?
    用catch捕获Exception 得到的就是 未将对象引用设置到对象的实例  的对话框
      

  6.   

    应该和  NATUPNPLib.IStaticPortMapping smap;
    这句没有关系,其他地方找不到异常啊!
      

  7.   

    楼上提醒我了,单步调试后NATUPNPLib.IStaticPortMappingCollection mapping = nat.StaticPortMappingCollection;
    int i = 0;
    NATUPNPLib.IStaticPortMapping smap;//单步跳过了这句
    IEnumerator mapEm = mapping.GetEnumerator();
    mapEm.Reset();//单步跳过了这句 没有执行while循环 直接 执行了   catch (Exception e)
    然后messagebox抛出了这个异常!倒地什么问题啊
      

  8.   

    在 mapEm.Reset() 这行设置断点,调试执行到这,观察 mapEm 是不是 null ,如果是的话 mapping.GetEnumerator() 出了问题
      

  9.   

    mapEm.Current as IStaticPortMapping不知道类型兼容不兼容
      

  10.   

                NATUPNPLib.IStaticPortMapping smap = mapping[0, string.Empty];            NATUPNPLib.IStaticPortMapping smap = mapping[0, string.Empty];
    http://hi.baidu.com/earnandlearn/blog/item/24ed4a60d82dcfd6e7113a31.html
      

  11.   

    我的机子上  NATUPNPLib.IStaticPortMappingCollection mapping = nat.StaticPortMappingCollection;
    mapping一直为Null。帮不了你。