我想在Delphi 2010中使用TNetSharingManager来编译这个项目 。 我已经导入types库,并试图编译它,但不幸的是,我在这个函数中得到一个访问冲突:
函数TNetSharingManager.GetDefaultInterface:INetSharingManager; 开始 如果FIntf =零则 连接; 断言(FIntf nil,'DefaultInterface为NULL。组件未连接到服务器,在此操作之前必须调用“Connect”或“ConnectTo”)。 结果:= FIntf; 结束;
(NETCONLib_TLB的一部分)错误在于: if FIntf = nil then
出于某种奇怪的原因。
这是调用它的代码:
过程TForm1.GetConnectionList(string,IdList:TStrings); VAR pEnum:IEnumVariant; vNetCon:OleVARIANT; dwRetrieved:Cardinal; pUser:NETCONLib_TLB.PUserType1; NetCon:INetConnection; 开始 Strings.Clear; IdList.Clear; pEnum:=(NetSharingManager.EnumEveryConnection._NewEnum作为IEnumVariant); while(pEnum.Next(1,vNetCon,dwRetrieved)= S_OK)做 开始 (IUnknown(vNetCon)作为INetConnection).GetProperties(pUser); NetCon:=(IUnknown(vNetCon)作为INetConnection); 如果(pUser.Status在[NCS_CONNECTED,NCS_CONNECTING])//删除,如果你想禁用网卡也 和([NCM_LAN,NCM_SHAREDACCESSHOST_LAN,NCM_ISDN]中的pUser.MediaType) 和(GetMacAddress(GuidToString(pUser.guidId))'') 开始 //我们只需要启用有效的网卡 Strings.Add(pUser.pszwName); IdList.Add(GuidToString(pUser.guidId)); 结束; 结束; 结束;
我不明白为什么我不能与零比较。 有任何想法吗?
当触发错误时,TNetSharingManager对象本身可能实际上已经死亡(或者不是首先创建的)。 FIntF = nil表达式是对类的实际字段的第一个引用,即它将指向无效的地址空间。
[编辑]我下载源代码并按照步骤导入了TLB(Delphi 2010)。 为了执行应用程序,我必须(a)以管理员身份运行Delphi,因为默认情况下我不是高级用户,(b)必须为pUser <> nil添加一个检查,因为最终的getProperties返回一个nil结构,但除此之外,代码运行良好。 所以不幸的是,我似乎无法重现您的问题。
重新读你的问题,你编译时得到一个AV?