Проблема нарушения доступа TNetSharingManager - PullRequest
2 голосов
/ 17 октября 2010

Я пытаюсь скомпилировать этот проект в Delphi 2010, который использует TNetSharingManager. Я импортировал библиотеку типов и попытался скомпилировать ее, но, к сожалению, я получаю нарушение прав доступа в этой функции:

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;

Я не понимаю, почему я не могу сравнить с ноль . Есть идеи?

1 Ответ

2 голосов
/ 17 октября 2010

Вероятно, сам объект TNetSharingManager фактически умер (или не был создан изначально) при возникновении этой ошибки.Выражение FIntF = nil является первой ссылкой на фактическое поле класса, т.е. оно будет указывать на недопустимое адресное пространство.

[Редактировать] Загружаюисточник и следовал инструкциям по импорту TLB (Delphi 2010).Чтобы выполнить аппиляцию, мне пришлось (а) запустить Delphi от имени администратора, потому что я не опытный пользователь по умолчанию, и (б) пришлось добавить проверку для pUser <> nil , поскольку последняяgetProperties возвращает nil-структуру, но кроме этого код работает нормально.Так что, к сожалению, я не могу воспроизвести вашу проблему.

Перечитывая ваш вопрос, вы получаете AV при компиляции ?

...