Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.06.29;
Скачать: CL | DM;

Вниз

Включение элемента в множество. Вишу...   Найти похожие ветки 

 
-=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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.03 c
3-1116068681
ALex2
2005-05-14 15:04
2005.06.29
изменить значение всех ячеек


14-1117983887
asdqwer
2005-06-05 19:04
2005.06.29
Quicktime+IE


1-1118208998
MarS
2005-06-08 09:36
2005.06.29
Прокрутить Image


3-1116844274
ass1
2005-05-23 14:31
2005.06.29
опять isc4.gdb


1-1118220779
zorik
2005-06-08 12:52
2005.06.29
Экспорт в Excel