首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

一个超高端的有关问题,论坛里的大牛们都进来研究下

2012-06-24 
一个超高端的问题,论坛里的大牛们都进来研究下代码中 smap 对象 如何实例化呢?C# codeNATUPNPLib.IStaticP

一个超高端的问题,论坛里的大牛们都进来研究下
代码中 smap 对象 如何实例化呢?

C# code
                 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++;                 }




[解决办法]
首先,在下不是大牛
IStaticPortMapping 貌似是NATUPNPLib对COM接口IStaticPortMapping的.net封装,至于怎么实例化,要看类库NATUPNPLib是怎么实现的
[解决办法]
看了一下,这是IStaticPortMapping的声明

public interface IStaticPortMapping

它是一个接口,没法实例化
[解决办法]
这是哪行出的“未将对象引用设置到对象的实例”,代码中 smap 是转换而来,不需要实例化,而且有判断,倒是 nat 和 mapping 可能报这错,简化下可以这样
C# code
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代码贴上来 帮着看下吧 谢谢了。

C# code

//直接使用foreach循环,当MoveNext移到Count位置时,会产生异常,故采用变量i和mapcount进行控制
foreach (object n in mapping)
……

[解决办法]
楼主你先单步调试,看看是哪行语句抛出的异常
[解决办法]
在 mapEm.Reset() 这行设置断点,调试执行到这,观察 mapEm 是不是 null ,如果是的话 mapping.GetEnumerator() 出了问题
[解决办法]
mapEm.Current as IStaticPortMapping

不知道类型兼容不兼容
[解决办法]
NATUPNPLib.IStaticPortMapping smap = mapping[0, string.Empty];
C# code
            NATUPNPLib.IStaticPortMapping smap = mapping[0, string.Empty];
[解决办法]
我的机子上 NATUPNPLib.IStaticPortMappingCollection mapping = nat.StaticPortMappingCollection;
mapping一直为Null。帮不了你。

热点排行