TNetSharingManager访问冲突问题

时间:2010-10-16 21:57:17

标签: windows delphi api networking adapter

我正在尝试在使用TNetSharingManager的Delphi 2010中编译此project。我已经导入了类型库并尝试编译它,但不幸的是我在这个函数中遇到了访问冲突:

function TNetSharingManager.GetDefaultInterface: INetSharingManager;
begin
  if FIntf = nil then
    Connect;
  Assert(FIntf  nil, 'DefaultInterface is NULL. Component is not connected to Server. You must call "Connect" or "ConnectTo" before this operation');
  Result := FIntf;
end;

(NETCONLib_TLB的一部分) 由于某些奇怪的原因,错误在:if FIntf = nil then

调用它的代码:

procedure TForm1.GetConnectionList(Strings,IdList: TStrings);
var
  pEnum: IEnumVariant;
  vNetCon: OleVARIANT;
  dwRetrieved: Cardinal;
  pUser: NETCONLib_TLB.PUserType1;
  NetCon : INetConnection;
begin
  Strings.Clear;
  IdList.Clear;
  pEnum := ( NetSharingManager.EnumEveryConnection._NewEnum as IEnumVariant);
  while (pEnum.Next(1, vNetCon, dwRetrieved) = S_OK) do
  begin
     (IUnknown(vNetCon) as INetConnection).GetProperties(pUser);
     NetCon := (IUnknown(vNetCon) as INetConnection);

     if (pUser.Status in [NCS_CONNECTED,NCS_CONNECTING])//remove if you want disabled NIC cards also
     and (pUser.MediaType in [NCM_LAN,NCM_SHAREDACCESSHOST_LAN,NCM_ISDN] )
     and (GetMacAddress(GuidToString(pUser.guidId))'' ) then
     begin
       //we only want valid network cards that are enabled
       Strings.Add(pUser.pszwName );
       IdList.Add(GuidToString(pUser.guidId));
     end;
  end;
end;

我不明白为什么我无法与 nil 进行比较。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

当触发该错误时,TNetSharingManager对象本身可能实际上已经死亡(或者首先没有创建)。 FIntF = nil 表达式是对类的实际字段的第一个引用,即它将指向无效的地址空间。

[编辑] 我下载源代码并按照步骤导入TLB(Delphi 2010)。为了执行appilcation,我不得不(a)以管理员身份运行Delphi,因为默认情况下我不是高级用户,并且(b)必须添加 pUser<>的检查。 nil 因为最终的getProperties返回一个nil-structure,但除此之外代码运行正常。所以不幸的是,我似乎无法重现你的问题。

重读您的问题,您是否在编译时获得了AV?