2


1

TNetSharingManagerアクセス​​違反の問題

TNetSharingManagerを使用するDelphi 2010でこのhttp://delphi.about.com/od/humorandfun/a/fdac_macspoof.htm [プロジェクト]をコンパイルしようとしています。 タイプライブラリをインポートしてコンパイルしようとしましたが、残念ながらこの関数でアクセス違反が発生しています。

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 Answer


2


そのエラーがトリガーされたときに、TNetSharingManagerオブジェクト自体が実際に死んだ(またはそもそも作成されなかった)可能性があります。 _FIntF = nil_式は、クラスの実際のフィールドへの最初の参照です。 無効なアドレス空間を指します。

  • [編集] *ソースをダウンロードし、手順に従ってTLBをインポートしました(Delphi 2010)。 アプリケーションを実行するには、(a)デフォルトでパワーユーザーではないため、(a)Delphiを管理者として実行し、(b)最終的なgetPropertiesがnil-structureを返すため、_pUser <> nil_のチェックを追加する必要がありました。 、それ以外はコードは問題なく実行されます。 残念ながら、問題を再現できないようです。

質問を読み直して、コンパイル中にAVを取得していますか?