一个超高端的有关问题,论坛里的大牛们都进来研究下
一个超高端的问题,论坛里的大牛们都进来研究下
代码中 smap 对象 如何实例化呢?
------解决方案--------------------
首先,在下不是大牛
IStaticPortMapping 貌似是NATUPNPLib对COM接口IStaticPortMapping的.net封装,至于怎么实例化,要看类库NATUPNPLib是怎么实现的
------解决方案--------------------
看了一下,这是IStaticPortMapping的声明
public interface IStaticPortMapping
它是一个接口,没法实例化
------解决方案--------------------
这是哪行出的“未将对象引用设置到对象的实例”,代码中 smap 是转换而来,不需要实例化,而且有判断,倒是 nat 和 mapping 可能报这错,简化下可以这样
代码中 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。帮不了你。