一个超高端的问题,论坛里的大牛们都进来研究下
代码中 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);}
[解决办法]
[解决办法]
楼主你先单步调试,看看是哪行语句抛出的异常
[解决办法]
在 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。帮不了你。