Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
ВнизВключение элемента в множество. Вишу... Найти похожие ветки
← →
-=XP=- © (2005-06-08 15:09) [0]Что-то я совершенно конкретно завис.
Объявлены типы и константы:type
TrServiceAccess = $00..$1f;
TrServiceAccesses = set of TrServiceAccess;
const
saModuleCreate: TrServiceAccess = $00;
saRecordCreate: TrServiceAccess = $01;
saGetRandomList: TrServiceAccess = $02;
saReserved1: TrServiceAccess = $03;
saReserved2: TrServiceAccess = $04;
saServiceCreate: TrServiceAccess = $05;
saServiceUse: TrServiceAccess = $06;
Есть функция:function TAccessManager.CheckAccess(const a_SID: TGUID; const a_Right: TrServiceAccess): boolean;
begin
...
Result := (a_SID = SYSTEM_SID) and (a_Right in [saServiceUse, saRecordCreate]); // Строка проверки
...
end;
Вызываю:B := CheckAccess(SYSTEM_SID, saServiceUse);
В результате B = FALSE;
Прохожу отладчиком - и на "Строке проверки" в Watch выдает для констант saServiceUse значение 4, а для saRecordCreate значение 14.
Мне кажется, у меня уже мозги где-то зависли. Я с множествами ничего не напутал?
Дополнительная информация:
1. Используется множество модулей DLL. Внутри них по запросу создаются некие объекты и возвращаются интерфейсные ссылки на эти объекты. Все проекты на данный момент в одной проектной группе. ПереBuilding всех модулей единым махом не приводит ни к каким результатам - все равно эти константы равны 4 и 14.
2. На скорую руку создал новый проект, подсоединил модуль, в котором определяются эти типы и константы (первый фрагмент кода), написал строку (saServiceUse in [saServiceUse, saRecordCreate]) и все работает как надо, в Watch константы равны 1 и 6.
Что с ним сделать, чтобы оно развисло? Или чтобы я развис? :)
← →
Alexander Panov © (2005-06-08 15:16) [1](a_SID = SYSTEM_SID) - здесь условие выполняется?
← →
-=XP=- © (2005-06-08 15:29) [2](a_SID = SYSTEM_SID) - здесь условие выполняется?
Да. Тут все нормально, выполняется.
Вопрос в том, что при вызове:CheckAccess(SYSTEM_SID, saServiceUse);
в метод передается saServiceUse = $06, а внутри метода эта константа равна saServiceUse = $04.
Что-то меня все сильнее преследует мысль, что при компиляции одной из библиотек DLL используется старая версия модуля с другим значением константы.
Пущусь-ка я на поиски "ископаемого мусора". :)
← →
-=XP=- © (2005-06-08 16:50) [3]Нашел. :)
Старый, двухмесячной давности, dpk валялся в одной из папок Delphi. А на него ссылались пакеты с компонентами, которые эти два месяца висели в палитре.
Удалил, перекомпилировал несколько пакетов, и все заработало.
Правда, при этом rtl.dpk под горячую руку попался. :/
Пришлось в корзине выискивать. Тоже нашел. Какой я сегодня находчивый! ;)
P.S. Вот и не верь после этого в гороскопы. Вчера какая-то ведущая ляпнула: "Проведете много времени в размышлениях о прошлом". :)
← →
Anatoly Podgoretsky © (2005-06-08 16:57) [4]-=XP=- © (08.06.05 16:50) [3]
Это не страшно, вот когда скажет "проведете много времени в размышлении о будушем" надо будет серьезно озаботиться.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.06.29;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.052 c