Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2008, 23:15   #1
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию Ворнинги

После перехода на Delphi 7.0 мои проекты оказались полны всяких варнингов.
Так как хочеться получить проект без варнингов, обращаюсь к вам за помощью, как переписать программу так, что бы этих варнингов не создавалось (про то что можно убрать галочку в компиляторе я в курсе, но хочется именно прогу сделать "грамотно").

1. Мне нужно сохранять числа типа longword в файл. Объявляю sLong: file of longword потом всякие AssignFile(sLong,'c:\temp.txt'); и получаю варнинг Unsafe type 'sLong: file of Cardinal'
Чего в этом криминального? Как делать правильно? Потоком писать?

2. Сложение/вычитание знаковых и безнаковых типов. У меня есть положение в файле и смещение. Положение в файле безнаковое, смещение знаковое. Ну по логике вещей положение не может быть отрицательным, а смещение может быть как вперед так и назад. Выдает варнинг. Положение делать знаковым не хочется, так как
тогда допустимый максимальный размер файла будет меньше.

3.
procedure TForm1.MailDblClick(Sender: TObject);
begin
ShellExecute(Handle,'open',PChar('m ailto:'+(Sender as TEdit).Text),nil,nil,SW_SHOWNORMAL) ;
end;

Unsafe type 'PChar'
Sergey2 вне форума Ответить с цитированием
Старый 22.01.2008, 00:07   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Тщательней относитесь к выбору типа операндов, выбирайте такой тип, который надежно будет обеспечивать выполнение программы. Если программа пустяковая, то на предупреждения можно и не обращать внимания, но "красивше" когда их нет. Например в первом случае у вас тип longword как-то перекочевал в Cardinal. Получаете прдупреждение о ненадежности этого типа, т.к. его длина в два раза меньше и если размер переменной, объявленной в первом типе превысит длину второго типа, начнутся неприятности ну и т.д.
puporev вне форума Ответить с цитированием
Старый 22.01.2008, 00:15   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Не пойму ваших проблем...
Все они решаются достаточно элементарно.
К тому же в хэлпе семерки есть шикарные подсказки по поводу перехода с предыдущих версий.
Более того, перепроверил приведенное вами - никаких вАрнингов вообще нет, единственное - пришлось вручную подключить ShellAPI...

Последний раз редактировалось mihali4; 22.01.2008 в 10:55.
mihali4 вне форума Ответить с цитированием
Старый 22.01.2008, 00:15   #4
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Например в первом случае у вас тип longword как-то перекочевал в Cardinal. Получаете прдупреждение о ненадежности этого типа, т.к. его длина в два раза меньше и если размер переменной, объявленной в первом типе превысит длину второго типа, начнутся неприятности ну и т.д.
Никуда он не перекочевал. Неиспользую я нигде Cardinal. И это оба типа 32битные беззнаковые и длина такая же.
Sergey2 вне форума Ответить с цитированием
Старый 22.01.2008, 00:17   #5
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Не пойму ваших проблем...
Все они решаютсч достаточно элементарно.
К тому же в хэлпе семерки есть шикарные подсказки по поводу перехода с предыдущих версий.
А где именно? Искал - ненашел.
Цитата:
Более того, перепроверил приведенное вами - никаких вАрнингов...
А в компиляторе галочки все стоят? Всмысле варнинги то не отключены?
Sergey2 вне форума Ответить с цитированием
Старый 22.01.2008, 00:36   #6
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
и получаю варнинг Unsafe type 'sLong: file of Cardinal'
Это я писал?

По поводу размерности типов Cardinal и LongWord


Цитата:
Название
Длина,байт
Диапазон значений

Cardinal
4
0. .. 2 147 483 647

Byte
1
0...255

Shortint
1
-128...+127

Smallint
2
-32 768...+32 767

Word
2
0...65 535

Integer
4
-2 147 483 648...+2 147 483 647

Longint
4
-2 147 483 648...+2 147 483 647

Int64
8
-9*1018. ..+9*1018

LongWord
4
0. . .4 294 967 295
puporev вне форума Ответить с цитированием
Старый 22.01.2008, 00:48   #7
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Это я писал?
Не, дельфевый компилятор
Цитата:
По поводу размерности типов Cardinal и LongWord
Ааа, ну тогда сорри, просто у меня вхелпе сказано, что
Cardinal 0..4294967295 unsigned 32-bit
И действительно, переменная этого типа может иметь значение 4294967295.
Sergey2 вне форума Ответить с цитированием
Старый 22.01.2008, 01:02   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
А где именно? Искал - не нашел.
Цитата:Более того, перепроверил приведенное вами - никаких вАрнингов...

А в компиляторе галочки все стоят? Всмысле варнинги то не отключены?
Галки стоят по полной программе, и это - естественно...
Цитата:
Искал - не нашел
А это проще простого - когда компилятор на что-нибудь будет ругаться - вызываем хэлп по ентой штуке и там рассказывают, почему это или то нельзя использовать, более того - даются вполне исчерпывающие ответы. Неужто не замечали?
mihali4 вне форума Ответить с цитированием
Старый 22.01.2008, 01:10   #9
Sergey2
Форумчанин
 
Регистрация: 08.01.2008
Сообщений: 233
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А это проще простого - когда компилятор на что-нибудь будет ругаться - вызываем хэлп по ентой штуке и там рассказывают, почему это или то нельзя использовать, более того - даются вполне исчерпывающие ответы. Неужто не замечали?
Unsafe type '<element><element><element>'

You have used a data type or operation for which static code analysis cannot prove that it does not overwrite memory. In a secured execution environment such as .NET, such code is assumed to be unsafe and a potential security risk.

Я понял это все так: используется код, анализ которого не позволяет компилятору понять, переписывает ли он память или нет, что считается небезопасным.
Ну ладно, с пчарами это еще похоже на правду (хотя не понятно как же делать надо). Но каким образом это все относиться к тому, что файл у меня лонгвордовский и как же поступить - ума не приложу
Sergey2 вне форума Ответить с цитированием
Старый 22.01.2008, 08:17   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я чет не пойму, а в чем траблы то? - проги то работают... Али нет?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц