Я использую этот блок в приложении Delphi 2010, чтобы сообщить мне, в какие группы Active Directory входит пользователь.
Я создал совершенно новое тестовое приложение для форм vcl, добавил модуль из этой ссылки и создал небольшую форму с полем для редактирования имени пользователя, другим полем для хранения списка групп, разделенных CSV, и списком. хранить список групп в столбчатом формате.
Мой код выглядит так:
procedure TfrmMain.btnShowGroupsClick(Sender: TObject);
var
ad: TADSI;
adrec: TADSIUserInfo;
csvGroups: string;
slGroups: TStringList;
begin
//take username from an edit box, tell me what AD groups they are a member of
ad := TADSI.Create(Self);
try
ad.GetUser(edtDomain.Text,edtUser.Text,adrec);
csvGroups := adrec.Groups;
edtADGroups.Text := csvGroups; //ACCESS VIOLATION!!
finally
FreeAndNil(ad);
end;
{
//If I UN-comment this code, and make NO OTHER CHANGES, then the
//aforementioned access violation does NOT occur; there are no errors @ all,
//and everything works just fine
slGroups := TStringList.Create;
try
slGroups.CommaText := csvGroups;
listBoxADGroups.Items := slGroups;
finally
FreeAndNil(slGroups);
end;
//}
end;
Если я запускаю этот код как есть, я получаю нарушение прав доступа при попытке назначить список групп CSV для поля редактирования.
---------------------------
Debugger Fault Notification
---------------------------
Project C:\Users\my_username.mydomain\bin\ADSITest.exe faulted with message: 'access violation at 0x0048a321: read of address 0x458c0035'. Process Stopped. Use Step or Run to continue.
---------------------------
OK
---------------------------
Однако, если я откомментирую блок кода, включающий TStringList, то все это прекрасно работает.
Либо это действительно странная ошибка компилятора, либо я упускаю что-то очевидное. Кто-нибудь может мне помочь?
Структура "adrec" - это простая запись, состоящая из нескольких логических значений, строк и еще одной записи (TPassword).