На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi · Книги по Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как прочитать список файлов, поддиректорий в директории?
5. Как запустить программу/файл?
... (продолжение следует) ...

Вопросы, подробно описанные во встроенной справочной системе Delphi, не несут полезной тематической нагрузки, поэтому будут удаляться.
Запрещается создавать темы с просьбой выполнить какую-то работу за автора темы. Форум является средством общения и общего поиска решения. Вашу работу за Вас никто выполнять не будет.


Внимание
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...
Модераторы: jack128, D[u]fa, Shaggy, Rouse_
Страницы: (14) « Первая ... 12 13 [14]  все  ( Перейти к последнему сообщению )  
> RAD Studio XE 2 , Обсуждаем новую версию Delphi
    Цитата [S]mike @
    Такой прием называется "дай обезьяне гранату" (без намеков на ник ). Можно конечно воспользоваться. Но стоит элементарно где-то описАться, как получим кучу труднонаходимых ошибок.


    Приведённая примером статья, хотя и содержит несколько случаев, но предлагает использовать absolute всего для одной вещи: уменьшения шума в коде от приведения типов или переприсваивания указателей. При таком использовании опасности absolute не превышают опасностей оригинального кода (с использованием указателей или преведений типов).

    Поэтому "стоит элементарно где-то описАться" - это не недостаток absolute. Это недостаток жёсткого приведения типа или использования указателей.

    Другими словами, ситуация с absolute как минимум не хуже оригинала.

    Я просканировал комменты, но не нашёл ни одного, говорящего про недостаток именно самого absolute, а не операции, которую он подменяет.

    Цитата
    Во всяком случае их использование следует минимизировать, а не декларировать все указателем, потом через absolute "приводить" к нужным типам


    Несомненно.

    Лично я к goto, absolute и указателям отношусь как "можно использовать только в разрешённых верховной партией случаях" :lol:

    P.S.
    Цитата
    Для первого примера с компонентами RTTI или WinAPI было бы более удобным способом.


    Это же просто пример. Он сделан на компонентах, чтобы писать меньше кода - не надо описывать классы. В целом же там могут быть не компоненты, классы без RTTI и даже вовсе не классы. Простой пример: записи, чьё содержимое трактуется по первому полю.
      хм. не знал что можно еще и классы так приводить. и я всегда почему то считал что ссылка absolute всегда должна быть одного размера с исходной переменной.

      Добавлено
      я не один такой. "мой" баг пометили как дубликат и по ссылке я узнал что он тянется еще с 2009 версии.
      Сообщение отредактировано: ViktorXP -
        Цитата ViktorXP @
        FreeAndNil(I);// а вот это жесть. и оно не ругается на это. даже не предупреждает.


        это было всегда и во всех версиях дельфи.

        можно сделать аналог, без этого недостатка

        ExpandedWrap disabled
          TObjectHelper = class
          public
            procedure FreeAndNil<T: TObject>(var Obj: T);
          end;
           
          procedure TObjectHelper.FreeAndNil<T: TObject>(var Obj: T);
          begin
            SysUtils.FreeAndNil(Obj);
          end;
           
           
          Obj: TObject;
          I: Integer;
           
          TObjectHelper.FreeAndNil<TObject>(Obj); // компилится
          TObjectHelper.FreeAndNil<Integer>(I); // НЕ компилится
          Что-то я не понял
          Цитата
          'Packed' Now Forces Byte Alignment of Records

          If you have legacy code that uses the packed record type and you want to link with an external DLL or with C++, you need to remove the word "packed" from your code. The packed keyword now forces byte alignment, whereas in the past it did not necessarily do this. The behavior change is related to C++ alignment compatibility changes in Delphi 2009.

          http://docwiki.embarcadero.com/RADStudio/en/Delphi_Compiler_Changes_for_XE2

          Цитата
          Record Type Data Field Alignment

          In previous versions of Delphi, packed records were used to ensure proper data alignment when calling external libraries and notably certain external Windows API functions that require record or struct parameters. Unused data fields were introduced to "pad things out" and make the needed data fields line up as needed. The current compiler implementation eliminates the need for using packed records this way, in most cases. Revising your existing source code to eliminate needless packed records and "padding" makes the source more clear and easier to maintain.

          If you require that your existing data files maintain compatibility with older versions of Delphi, apply the compiler directive {$OLDTYPELAYOUT ON} to source code where the older record organization is still needed.

          http://docwiki.embarcadero.com/RADStudio/en/Converting_32-bit_Delphi_Applications_to_64-bit_Windows

          Что они в итоге сделали с packed?
            В Delphi 2009 было убрано это поведение.

            Насчёт XE2 - тоже не уловил. Вроде packed по своему определению делает то, что они приписали изменениям в XE2.

            Добавлено
            Вот здесь есть мнение, что документация говорит про выравнивание начала записи, а не полей в ней.
              немного не понял про Packed. он идет теперь по умолчанию и его можно не указывать или все так как прежде. с Packed пакует без Packed выравнивает.

              Добавлено
              все. по примеру я понял. если внутри есть пакованная запись то и эта запись будет паковаться
              Сообщение отредактировано: ViktorXP -
                Если фишка именно в выравнивании начала записи (в массивах, я так полагаю - а где еще?), то причем тут код в DLL? И еще интересно, как согласуют выравнивание полей в записях, переправляющихся в WinAPI функции.
                  Расположение записи на стеке тоже выравнивается.
                    Цитата ViktorXP @
                    с Packed пакует без Packed выравнивает.

                    :yes:
                    Но такое поведение вроде нужно директивами задавать.
                      да нет. вроде он по умолчанию выравнивает до восьми или до четырех байт. это если хочешь поменять изменить это то либо packed либо директивы. лично я юзаю packed лишь тогда когда мне нужно "кучно" собрать байты. во всех других случаях это потеря производительности.
                        Да :yes: И это нисколько не противоречит вышесказанному:
                        Цитата ViktorXP @
                        с Packed пакует без Packed выравнивает.

                        А ты попробуй поиграться с директивами {$OLDTYPELAYOUT} и {$A}

                        кста, а какая у тебя версия Delphi (а то я тут тебе советую..)?

                        Добавлено
                        Цитата ViktorXP @
                        вроде он по умолчанию выравнивает до восьми или до четырех байт

                        Судя по встроенному help'у (XE2 - Update3, Help - Update3) - выравнивает до 8 (quadword).
                          Меня в основном волнует, не изменилось ли поведение при указании packed.
                          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                          0 пользователей:


                          Рейтинг@Mail.ru
                          [ Script execution time: 0,0508 ]   [ 17 queries used ]   [ Generated: 16.09.25, 10:29 GMT ]